我正在尝试从带有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
因此两个值都转到第一个参数。 我找不到一些关于如何调用这样的函数的例子。
答案 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 ...