使用out参数调用函数的函数会导致错误

时间:2016-08-24 22:01:47

标签: postgresql

我是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中做错了什么?

任何帮助将不胜感激!

感谢。

亨利

1 个答案:

答案 0 :(得分:0)

呃..我应该用Google搜索一下。

OUT参数不应该在PERFORM参数中。所以它应该是:

PERFORM func_out(argin);

如果我确实需要输出参数,我需要使用:

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