我在 PostgreSQL 9.2 中有一个 plpgsql 函数,它返回一个表。该函数运行几个 SELECT,它们返回与函数相同的列,然后根据某些检查返回这些结果或引发异常。我能看到的唯一方法是使用 FOR ... LOOP,但我想不出一种方便的方法来返回行。
我想做这样的事情:
CREATE OR REPLACE FUNCTION my_function()
RETURNS TABLE(column1 integer, column2 boolean, ...)
AS $BODY$
DECLARE
result_row RECORD;
BEGIN
FOR result_row IN (SELECT * FROM other_function_returning_same_columns()) LOOP
IF something_wrong_with(result_row) THEN
RAISE EXCEPTION 'Something went wrong';
END IF;
RETURN NEXT result_row;
END LOOP;
END
$BODY$ LANGUAGE plpgsql STABLE;
这给了我一个错误:
错误:RETURN NEXT 不能在带有 OUT 参数的函数中有参数
我不确定为什么 Postgres 在这里抱怨,因为我的代码看起来很像文档中的示例,除了我的函数返回 TABLE 而不是 SETOF。没有 OUT 参数。
我最终设法让它使用
RETURN QUERY SELECT result_row.column1, result_row.column2, ...;
但是必须一直列出所有列是丑陋且难以维护的。我相信一定有更好的方法。