在Plpgsql中,如何在另一个用户定义的函数中使用用户定义的函数

时间:2016-11-04 02:12:56

标签: sql postgresql plpgsql

我有一个简单的用户定义函数如下:

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函数中,我想调用所有这三个函数。有没有人知道如何做到这一点?

1 个答案:

答案 0 :(得分:0)

如错误消息所示:

  

查询没有结果数据的目的地。

意思是,你不能在没有结果目的地的plpgsql函数中执行SELECT 如果要丢弃结果,请使用PERFORM代替SELECT

相关: