plpgsql:调用具有2个OUT参数的函数

时间:2012-05-14 13:10:26

标签: postgresql plpgsql

我正在尝试从带有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();

     

INFO:x:&lt;(1,2)

     

信息:y:&lt;&gt;

     

get_test_read

     

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

2 个答案:

答案 0 :(得分:32)

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

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

SELECT * FROM get_test() INTO xx, yy;

答案 1 :(得分: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;  

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

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

Npgsql Basic Usage

PL/pgSQL Function Parameter Modes: IN, OUT, INOUT