Как вернуть результаты нескольких запросов (которые были зациклены) в одной таблице? - PullRequest
0 голосов
/ 16 мая 2011

В plpgsql я хотел бы использовать результаты запроса A для выполнения нескольких запросов (запросов B) и возвращать результаты всех запросов B в виде одной таблицы, но я не уверен, как это сделать. Я использую функциональность 'RETURN QUERY' в plpgsql?

Вот пример. Функция находит все записи zip_code с заданным кодом, а затем ищет во всех местах состояние этого исходного zip_code. (Я знаю, что текущий запрос может быть выполнен через объединение, но мой АКТУАЛЬНЫЙ запрос потребовал бы этой функциональности.)

begin;
create OR REPLACE function t() returns setof locations as
$$
declare z zip_codes%rowtype;
begin
  for z in select * from zip_codes where code like '%32301%'
  LOOP
    return query select * from locations where locations.state like z.state; #query B 
        # All I want to do is return the results from all of the above queries as one
        # result set.
  END LOOP;
  return;
end
$$
language 'plpgsql';
commit;

Есть идеи, как мне это сделать?

Ответы [ 2 ]

2 голосов
/ 16 мая 2011

Вы можете создать временную таблицу, заполнить ее результатами каждого цикла и, наконец, вернуть содержимое временной таблицы.

select * into temporary resulttbl from locations where 1 = 2
...
loop
    insert into resulttbl select ...
end loop
...
return query select * from resulttbl

РЕДАКТИРОВАТЬ

ИЛИ вы можете использоватьфрагмент кода в вашем вопросе.Это должно работать (как вы сказали в комментарии, док говорит, что это возможно).У вас есть ошибки?

0 голосов
/ 16 мая 2011

Рассмотрите возможность возврата строк напрямую, используя один оператор:

return query
select locations.*
from locations
join zip_codes on zip_codes.state = locations.state
where zip_codes like '%32301%';
...