我是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 :(得分:0)
OUT参数不应该在PERFORM参数中。所以它应该是:
PERFORM func_out(argin);
如果我确实需要输出参数,我需要使用:
SELECT * FROM func_out(argin) INTO dummy1, dummy2;