我试图在Postgres 9.1中编写一个过程(函数)来从视图中选择所有数据并返回它(所有列),以便我们的应用程序可以使用它 . 目的是让应用程序在需要数据时调用该过程 . 我的问题是我似乎无法使语法正确返回任何数据 . 我已经在MySQL,SQL Server和Oracle中编写了程序,但从未在postgres中编写过程,这是完全不同的 . 一旦它工作是最好的方式来调用它只是使用选择“功能名称”?任何帮助,将不胜感激 .
CREATE OR REPLACE FUNCTION fg.get_flight_times()
RETURNS setof record AS
$BODY$
declare times record;
begin
select * into times from fg.fn_dy_dest_dep_arr;
return;
end;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION fg.get_flight_times()
OWNER TO jason;
GRANT EXECUTE ON FUNCTION fg.get_flight_times() TO fltrakr;
1 回答
在PL / pgSQL函数内部,您需要使用RETURN NEXT或RETURN QUERY,如手册中所述:
http://www.postgresql.org/docs/current/static/plpgsql-control-structures.html#AEN54092
在9.1中不再需要用户
RETURNS setof record
,使用returns table
要容易得多 . 如果您只想返回SELECT语句的结果,也可以使用SQL,这使得函数更容易:请注意,在这种情况下,您必须在创建时指定函数返回的列定义 . 使用该版本,您只需使用:
当使用
returns setof record
时,你不需要在创建时指定列,但是从函数中选择时你将被迫这样做(我发现它更复杂,因为这需要在每次使用函数时完成):这是这样使用的:
在我看来更复杂(因为调用者需要知道列的结构 and 数据类型)
请阅读手册,我在这里写的所有内容也都记录在那里(我知道这只是因为我已经阅读了手册...)