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 错误:RETURN 在返回 void 的函数中不能有参数