我在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;
Run Code Online (Sandbox Code Playgroud)
这给了我一个错误:
错误:RETURN NEXT在OUT参数的功能中无法使用参数
我不确定为什么Postgres在这里抱怨,因为我的代码看起来很像文档中的示例,除了我的函数返回TABLE而不是SETOF.没有OUT参数.
我最终成功地使用了它
RETURN QUERY SELECT result_row.column1, result_row.column2, ...;
Run Code Online (Sandbox Code Playgroud)
但是必须一直列出所有列是丑陋的,难以维护.我相信一定有更好的方法.