У меня просто есть таблица, которая содержит список стран и их коды страны 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"
Я знаю, что могу определить ТИП и затем цикл через recordset как курсор, но 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;
Отметьте "зачет ВОЗВРАТОВ [имя таблицы]". Но это, кажется, не является самым гибким. Это разваливается, если я пытаюсь возвратить соединение нескольких таблиц.
Вы должны быть в состоянии использовать выходные параметры, как это:
CREATE OR REPLACE FUNCTION get_countries(country_code OUT text, country_name OUT text)
RETURNS setof record
AS $$ SELECT country_code, country_name FROM country_codes $$
LANGUAGE sql;