【发布时间】:2014-12-25 18:59:07
【问题描述】:
我正在尝试使用 PL/pgSQL (PostgreSQL 9.3) 实现一个函数,该函数返回一个与参数中的输入表具有相同结构的表。基本上,我想更新一个表,并用 plpgsql 返回更新后的表的副本。我搜索了 SO,发现了几个相关的问题(例如 Return dynamic table with unknown columns from PL/pgSQL function 和 Table name as a PostgreSQL function parameter),这导致了以下最小测试示例:
CREATE OR REPLACE FUNCTION change_val(_lookup_tbl regclass)
RETURNS _lookup_tbl%rowtype AS --problem line
$func$
BEGIN
RETURN QUERY EXECUTE format('UPDATE %s SET val = 2 RETURNING * ; ', _lookup_tbl);
END
$func$ LANGUAGE plpgsql;
但我无法在problem line 中为TABLE 或SETOF RECORD 提供正确的返回类型。根据this answer:
SQL 要求在调用时知道返回类型
但我认为返回类型(我打算从输入表类型借用)是已知的。有人可以帮助解释是否可以修复上述 PL/pgSQL 函数的签名吗?
注意,我需要参数化输入表并返回该表的更新。欢迎使用替代品。
【问题讨论】:
标签: postgresql polymorphism plpgsql dynamic-sql