2016-08-24 54 views
0

我是PostgreSQL的新手,所以這可能是一個愚蠢的問題,但我似乎無法在任何地方找到答案。所以,任何幫助表示讚賞。函數調用帶輸出參數的函數會導致錯誤

我有一個函數(func_main)調用具有一些OUT參數的另一個函數(func_out)。我總是得到一個錯誤,該功能找不到。如果我調用一個沒有OUT參數的函數(func_no_out),它可以正常工作。

下面是func_out代碼:

CREATE OR REPLACE FUNCTION func_out (argin integer, argout1 OUT integer, argout2 OUT integer) AS $body$ 
BEGIN 
    argout1 := argin; 
    argout2 := 2 * argin; 
END; 
$body$ 
LANGUAGE PLPGSQL 
; 

爲func_no_out代碼:

CREATE OR REPLACE FUNCTION func_no_out (argin integer) RETURNS VOID AS $body$ 
DECLARE 
    argout1 integer; 
    argout2 integer; 
BEGIN 
    argout1 := argin; 
    argout2 := 2 * argin; 
END; 
$body$ 
LANGUAGE PLPGSQL 
; 

最後的主要功能:

CREATE OR REPLACE FUNCTION func_main (argin integer) RETURNS VOID AS $body$ 
DECLARE 
    dummy1 integer; 
    dummy2 integer; 
BEGIN 
    --PERFORM func_out(argin, dummy1, dummy2); 
    PERFORM func_no_out(argin); 
END; 
$body$ 
LANGUAGE PLPGSQL 
; 

手動調用func_out工作正常。

=> select * from func_out(5); 
argout1 | argout2 
---------+--------- 
     5 |  10 
(1 row) 

當從func_main我得到的錯誤是調用func_out:

=> select * from func_main(6); 
ERROR: function func_out(integer, integer, integer) does not exist 
LINE 1: SELECT func_out(argin, dummy1, dummy2) 

所以我在做什麼錯在func_main?

任何幫助,將不勝感激!

謝謝。

亨利

回答

0

Ughh ..我應該用Google多一點。

OUT參數不應該在PERFORM參數中。因此,它應該是:

PERFORM func_out(argin); 

如果我想要做的輸出參數,我需要使用:

SELECT * FROM func_out(argin) INTO dummy1, dummy2;