[英]Store the result of an UPDATE with a RETURNING clause on PLPGSQL
[英]How do I return the result of a RETURNING clause from a plpgsql function?
我希望有一個相當通用的函數,該函數采用INSERT
, UPDATE
或DELETE
,其中可能包含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.