我有一个简单的用户定义函数如下:
create or replace function test()
returns table (a float, b float) as
$$
begin
drop table if exists test1;
create table test1(a float, b float);
insert into test1 values(1,1),(2,1),(3,3);
return query select * from test1;
end;
$$ language plpgsql;
我有另一个用户定义的功能。在这一个中,我想调用上面的函数。
create or replace function test2()
returns table (a float) as
$$
begin
select test();
return query select a+b from test1;
end;
$$language plpgsql;
之后,当我这样做时:
select test2();
它给了我一个错误:
查询没有结果数据的目的地。
如果我将第二个功能改为:
create or replace function test2()
returns table (a float) as
$$
select a+b from test();
$$language sql;
然后我做select test2();
它运行正常。我认为这不起作用的原因是当我从sql函数返回一些东西时,它返回一个表,但是当我从plpgsql函数返回一些东西时,它返回一些看起来像元组的东西。例如(1,2)。 1将是表的第一个属性,2将是第二个属性。这只是一个简单的例子,我可以用sql而不是plpgsql来解决这个问题。但是,在我的实际项目中,我真的想在另一个plpgsql函数中调用plpgsql函数。
然后我的程序的主要结构如下所示:
plpgsql function 1
plpgsql function 2
plpgsql function 3
在我的主要plpgsql函数中,我想调用所有这三个函数。有没有人知道如何做到这一点?
答案 0 :(得分:0)