2016-11-04 67 views
1

我有一个简单的用户定义的函数如下:在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(); 

它给了我一个错误:

query has no destination for result data.

如果我做我的第二个功能如下:

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

像错误消息指出:

query has no destination for result data.

意义,你不能在PLPGSQL功能没有目的地的结果执行SELECT
如果您想放弃结果,请使用PERFORM而不是SELECT

相关:

+0

感谢。它将从(功能)执行。 –

相关问题