gpt4 book ai didi

function - Postgres 9.0.4 : Error calling function which returns a ROWTYPE from within another function

转载 作者:行者123 更新时间:2023-11-29 12:22:42 25 4
gpt4 key购买 nike

我在使用 pl/pgsql 的 Postgres 9.0.4 上遇到意外行为,涉及从一个函数中进行选择,该函数将 ROWTYPE 返回到另一个函数内的 ROWTYPE 变量中。在下面的示例中,我:

  1. 创建一个表,TESTTABLE 并插入一行。
  2. 创建一个函数 FN_TEST_GET_ROW,它根据从 TESTTABLE 中选择的单个行返回一行 ROWTYPE TESTTABLE
  3. 以调用 ID=1 的 FN_TEST_GET_ROW 的函数 TESTX 的形式创建测试工具
  4. 调用测试工具

意外返回如下所示的错误错误:整数的无效输入语法:“(1,Fred)”

我只希望返回值 (1, Fred),如果我执行

SELECT fn_test_get_row(1);

直接。

创建表:

CREATE TABLE testtable
(
id INTEGER,
name VARCHAR(10)
);

添加数据:

INSERT INTO testtable (id, name) VALUES (1, 'Fred');

创建函数:

CREATE OR REPLACE FUNCTION fn_test_get_row(a INTEGER)
RETURNS testtable AS $$
DECLARE
i_row testtable;
BEGIN

SELECT *
INTO i_row
FROM testtable
WHERE id = a;

-- Success
RETURN i_row;

END;
$$ LANGUAGE plpgsql;

创建测试函数:

CREATE OR REPLACE FUNCTION testx()
RETURNS testtable AS $$
DECLARE
i_row testtable;
BEGIN

SELECT fn_test_get_row(1)
INTO i_row;

-- Success
RETURN i_row;
END;
$$ LANGUAGE plpgsql;

执行测试函数:

select testx();

返回错误:

ERROR:  invalid input syntax for integer: "(1,Fred)"
CONTEXT: PL/pgSQL function "testx" line 8 at SQL statement

********** Error **********

ERROR: invalid input syntax for integer: "(1,Fred)"
SQL state: 22P02
Context: PL/pgSQL function "testx" line 8 at SQL statement

最佳答案

我以前没见过 RETURNS tablename 语法。我个人会使用 RETURNS RECORDRETURNS SETOF。这是适合您的固定功能。我所做的是更改 testx 函数以将 fn_test_get_row() 视为一个表,并将 fn_test_get_row() 的结果类型更改为一个集合.

CREATE OR REPLACE FUNCTION fn_test_get_row(a INTEGER)
RETURNS SETOF testtable AS $$
DECLARE
i_row testtable%ROWTYPE;
BEGIN
SELECT INTO i_row * FROM testtable WHERE id = a;
RETURN NEXT i_row;
END;
$$ LANGUAGE plpgsql;

CREATE OR REPLACE FUNCTION testx()
RETURNS SETOF testtable AS $$
DECLARE
i_row testtable%ROWTYPE;
BEGIN
SELECT INTO i_row * FROM fn_test_get_row(1) AS foo;
RETURN NEXT i_row;
END;
$$ LANGUAGE plpgsql;

给出:

# select testx();
testx
----------
(1,Fred)
(1 row)

关于function - Postgres 9.0.4 : Error calling function which returns a ROWTYPE from within another function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7062108/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com