24

我正在尝试从具有 2 个 OUT 参数的 plpgsql 函数中获取值,但我遇到了一些问题。

这些是功能:

CREATE OR REPLACE FUNCTION get_test(OUT x text, OUT y text)
AS $$
BEGIN
   x := 1;
   y := 2;
END;
$$  LANGUAGE plpgsql;
----------------------------------------------------------------

CREATE OR REPLACE FUNCTION get_test_read()
RETURNS VOID AS $$
DECLARE
   xx text;
   yy text;
BEGIN

   SELECT get_test() INTO xx, yy;
   
   RAISE INFO 'x: <%>', xx;
   RAISE INFO 'y: <%>', yy;

END;
$$  LANGUAGE plpgsql;

命令的输出:

选择 get_test_read();

信息:x:<(1,2)

信息:y:<>

get_test_read


所以这两个值都转到第一个参数。我找不到一些关于如何调用这样的函数的例子。

4

2 回答 2

39

由于您有 2 个OUT参数,因此您的函数将返回一个记录

为了获取所有值,您应该使用函数作为数据源并将其放入FROM子句中,如下所示:

SELECT * FROM get_test() INTO xx, yy;
于 2012-05-14T13:37:02.450 回答
2
SELECT * INTO xx, yy FROM get_test();

更新:

解释:

修改第二个函数:

CREATE OR REPLACE FUNCTION get_test_read()
RETURNS VOID AS $$
DECLARE
   xx text;
   yy text;
BEGIN

   SELECT * INTO xx, yy FROM get_test();
   
   RAISE INFO 'x: <%>', xx;
   RAISE INFO 'y: <%>', yy;

END;
$$  LANGUAGE plpgsql;  

这类似于带有 TABLE 的 SELECT INTO,其中仅获得 2 个值:

SELECT "FIELD1", "FIELD2" INTO variable1, variable2 FROM "TABLE" WHERE ...

Npgsql 基本用法

PL/pgSQL 函数参数模式:IN、OUT、INOUT

于 2020-10-17T20:46:39.150 回答