Postgres函数 - 它可以返回一个类型和/或一组类型?

时间:2015-03-30 16:14:59

标签: postgresql

我想为postres写一个PLPGSQL函数,在成功时返回一个复杂类型,并在失败时返回一些其他复杂类型的SETOF。这可能吗?

我考虑过在失败时返回一个类型的数组,但是数组可能包含数万个条目,所以我假设将它作为数组返回是不明智的。这是正确的假设吗?

1 个答案:

答案 0 :(得分:0)

您可以通过返回光标记录和复杂类型来执行此操作:

CREATE FUNCTION example(IN integer, INOUT refcursor, OUT boolean, OUT point) AS $$
BEGIN
    IF 0 = $1 THEN                          -- Dummy condition
        OPEN $2 FOR SELECT * FROM pg_class; -- Open the given cursor for some query.
        $3 := true;                         -- Indicate that the operation was successful.
    ELSE
        $4 := point(1, 2);                  -- Return a composite type.
        $3 := false;
    END IF;
END;
$$ STABLE LANGUAGE plpgsql;

像这样使用:

BEGIN;
SELECT example(0, 'my_cursor');
-- Check the value of the first output parameter.
FETCH ALL IN 'my_cursor';
COMMIT;
但是,我认为这不会很方便。如果无法从视图或表中获取游标的内容,则需要使用另一个假定操作成功的函数。还有一个处理一组行或一个值的分支在SQL中很容易编写。