2016-11-04 103 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

感謝。它將從(功能)執行。 –