我希望有一个相当通用的函数,它可以包含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
函数返回与我的函数完全相同的格式,但我不确定如何。
答案 0 :(得分:3)
只要函数中的record
定义表结构,返回SELECT
就可以了。
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');