2016-02-26 2 views
0

У меня есть запрос, например: «select id, field1, field2 from table1» (id и field1 - integer, а field2 - varchar), и мне нужно вызвать запрос из функции и вернуть результат как является.Возвращает результат запроса из функции в postgresql

CREATE OR REPLACE FUNCTION get_all_record() 
    RETURNS TABLE(id integer , field2 varchar(20)) AS 
$$             
BEGIN 
    EXECUTE 'SELECT table1.id, table1.field2 FROM table1' INTO id, field2; 
    RETURN; 
END; 
$$ 
    LANGUAGE plpgsql 

но это решение возвращает только одну запись в одном поле. Как я могу это исправить?

+0

Вы хотите использовать 'RETURN QUERY' вместо' EXECUTE '...' INTO'. – JNevill

+0

JNevill, но если я использую RETURN QUERY вместо EXECUTE '...' В функцию возвращают все записи в одном поле, например text "(value1, value2)" – ViKo

ответ

1

Попробуйте это:

CREATE OR REPLACE FUNCTION get_all_record(OUT id integer, OUT field2 varchar(20)) 
RETURNS SETOF record 
AS $$ 
BEGIN 
    RETURN QUERY SELECT table1.id, table1.field2 FROM tiers; 
END; 
$$ 
LANGUAGE plpgsql; 
+0

Мне нужна функция без параметров – ViKo

+0

@ViKo Функция без параметров, возвращающих набор строк 'view';) Серьезные параметры' out' просто предоставляют структуру результатов, и вы должны использовать эту функцию как 'select * from get_all_record()' без указания параметров. @PeterEisentraut ваш пример можно немного упростить, используя 'language sql' вместо' plpgsql'. – Abelisto

Смежные вопросы