【问题标题】:plpgsql: calling a function with 2 OUT parametersplpgsql:使用 2 个 OUT 参数调用函数
【发布时间】: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


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

【问题讨论】:

    标签: postgresql plpgsql


    【解决方案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,我已经修改了我的答案并给出了解释
    猜你喜欢
    • 2020-12-31
    • 1970-01-01
    • 1970-01-01
    • 2012-07-18
    • 1970-01-01
    • 1970-01-01
    • 2021-11-19
    • 1970-01-01
    • 2020-11-08
    相关资源
    最近更新 更多