我在获取查询值方面遇到一些问题。我需要根据查询获得带有动态列的返回。对于这种情况,我不能使用RETURN TABLE语句,因为我们必须定义列。请帮忙 :)。谢谢
CREATE OR REPLACE FUNCTION public.FN_test(P_Company varchar, P_fiscal_periode varchar, P_opt int)
RETURNS SETOF RECORD
AS $BODY$
DECLARE
Details RECORD;
BEGIN
create table Details as
select * from M_Account;
RETURN QUERY select * from Details;
drop table Details;
END;
$BODY$
LANGUAGE plpgsql
这是结果错误
select FN_test('1000', '201808', 4)
> ERROR: set-valued function called in context that cannot accept a set
CONTEXT: PL/pgSQL function fn_test(character varying,character varying,integer) line 9 at RETURN QUERY
答案 0 :(得分:0)
如果返回记录类型,则必须定义列表中的列以从这些函数返回(调用时),并以以下格式调用该函数:
select * from FN_test('1000', '201808', 4)
as (f1 data type, f2 data type) --list of columns
还可以返回JSON类型(作为通用resuldt),然后对其进行处理:
CREATE OR REPLACE FUNCTION public.FN_test3(P_Company varchar, P_fiscal_periode varchar, P_opt int)
RETURNS setof json
AS $BODY$
DECLARE
Details RECORD;
BEGIN
create table Details as
select row_to_json(M_Account.*) from M_Account; --JSON function
RETURN QUERY select * from Details;
drop table Details;
END;
$BODY$
LANGUAGE plpgsql
并调用它:
select * from FN_test('1000', '201808', 4)