plpgsql:使用 2 个 OUT 参数调用函数

Posted

技术标签:

【中文标题】plpgsql:使用 2 个 OUT 参数调用函数【英文标题】:plpgsql: calling a function with 2 OUT parameters 【发布时间】:2012-05-14 13:10:26 【问题描述】:

我正在尝试从具有 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:

信息:y:

get_test_read


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

【问题讨论】:

【参考方案1】:

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

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

SELECT * FROM get_test() INTO xx, yy;

【讨论】:

它给了我如下错误:错误:“进入”或附近的语法错误 @Muhammed - 您只能在函数内使用SELECT... INTO...(定义了此类命名变量)。答案没有明确表明这一点。如果您在函数之外执行此操作,只需省略 INTO... 部分。【参考方案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 Basic Usage

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

【讨论】:

您好,谢谢您的回答!你能解释一下吗?这将有助于 OP 和未来的读者:) OK xShirase,我已经修改了我的答案并给出了解释

以上是关于plpgsql:使用 2 个 OUT 参数调用函数的主要内容,如果未能解决你的问题,请参考以下文章

返回多列的plpgsql函数被多次调用

plpgsql 错误:RETURN 在返回 void 的函数中不能有参数

plpgsql 函数 concat 可选参数 返回错误

将表名和列名定义为 plpgsql 函数中的参数?

如何将参数从 bat 文件或命令行传递给 plpgsql 函数?

使用 plpgsql 更新函数中的列