簡體   English   中英

如何從plpgsql函數返回RETURNING子句的結果?

[英]How do I return the result of a RETURNING clause from a plpgsql function?

我希望有一個相當通用的函數,該函數采用INSERTUPDATEDELETE ,其中可能包含RETURNING子句,並返回該結果。 一個相當人為的例子可能是這樣的:

CREATE FUNCTION my_insert(sql_insert TEXT) RETURNS record AS $$
DECLARE
    result record;
BEGIN
    EXECUTE sql_insert INTO result;
    RETURN result;
END;
$$ LANGUAGE plpgsql;

SELECT my_insert('INSERT INTO foo VALUES (1) RETURNING some_column, another_column');

盡管這行得通,但我認為這里的record不是正確的類型,因為RETURNING通常會返回表類型。 我想從我的功能恢復完全一樣的格式RETURNING做,但我不知道怎么樣。

只要函數中的SELECT定義了表結構,返回record就可以了:

SELECT * FROM my_insert('INSERT INTO foo VALUES (1) RETURNING some_column, another_column)
    AS f(some_column bigint, another_column timestamp);

如果my_insert函數的返回值始終是某種類型,則復合類型可能是更好的選擇:

CREATE TYPE my_insert_result AS (
    some_column bigint,
    another_column timestamp
);

然后更改函數以返回該類型:

CREATE FUNCTION my_insert(sql_insert TEXT) RETURNS my_insert_result AS $$
DECLARE
    result my_insert_result;
BEGIN
    EXECUTE sql_insert INTO result;
    RETURN result;
END;
$$ LANGUAGE plpgsql;

SELECT * FROM my_insert('INSERT INTO foo VALUES (1) RETURNING some_column, another_column');

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM