Какой самый простой способ вернуть набор записей из хранимой процедуры PostgreSQL?
У меня просто есть таблица, которая содержит список стран и их коды стран ISO. Я упаковываю запрос в хранимую процедуру (она же функция), например:
CREATE OR REPLACE FUNCTION get_countries(
) RETURNS setof record AS $
SELECT country_code, country_name FROM country_codes
$ LANGUAGE sql;
Я получаю ошибку:
ERROR: a column definition list is required for functions returning "record"
Я знаю, что могу определить ТИП, а затем перебрать набор записей, как курсор, но у IIRC есть лучший способ сделать это в более новых версиях PostgreSQL (я использую 8.4.3), но я выдергиваю свои волосы, пытаясь запомнить.
Редактировать:
Это работает:
CREATE OR REPLACE FUNCTION get_countries(
) RETURNS setof country_codes AS $
SELECT country_code, country_name FROM country_codes
$ LANGUAGE sql;
Обратите внимание на «ВОЗВРАЩАЕТСЯ setof [имя таблицы]». Но это не кажется самым гибким. Он разваливается, если я пытаюсь вернуть объединение нескольких таблиц.