我在使用 pl/pgsql 的 Postgres 9.0.4 上遇到了与从另一个函数中返回 ROWTYPE 到 ROWTYPE 变量的函数相关的意外行为。在下面的示例中,我:
- 创建一个表 TESTTABLE 并插入一行。
- 创建一个函数 FN_TEST_GET_ROW,它根据从 TESTTABLE 中选择的单行返回 ROWTYPE TESTTABLE 行
- 以函数 TESTX 的形式创建一个测试工具,该函数调用 ID=1 的 FN_TEST_GET_ROW
- 调用测试工具
意外返回如下所示的错误 ERROR: invalid input syntax for integer: "(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