在 RETURNING 语句中使用记录作为函数参数
Use Record As Function Argument in RETURNING Statement
我有一个将记录作为参数的 plpgsql 函数。
我想在插入的 RETURNING
语句中调用此函数,但不确定将什么作为参数(*
不起作用)即
-- Postgres 12
INSERT INTO some_table (a, b, c)
VALUES .....
RETURNING
function_that_takes_record_argument(<the_new_record>)
我可以用什么代替 <the_new_record>
?
我不确定为什么您的示例不起作用,但我会尝试数据修改 CTE:
WITH insert_result AS (
INSERT INTO ... RETURNING *
)
SELECT your_function_here(insert_result.*)
在 https://www.postgresql.org/docs/current/queries-with.html#QUERIES-WITH-MODIFYING
查看更多
要将 record/row 传递给函数,您需要明确指定记录类型:
create table t(a int, b text);
create or replace function f(r record) returns int language plpgsql as $$
begin
return r.a;
end $$;
insert into t values(2, 'b');
select f(t.*), f(t), f((a,b)::t) from t;
f | f | f
---+---+---
2 | 2 | 2
insert into t values(3, 'c') returning f(t);
f
---
3
我有一个将记录作为参数的 plpgsql 函数。
我想在插入的 RETURNING
语句中调用此函数,但不确定将什么作为参数(*
不起作用)即
-- Postgres 12
INSERT INTO some_table (a, b, c)
VALUES .....
RETURNING
function_that_takes_record_argument(<the_new_record>)
我可以用什么代替 <the_new_record>
?
我不确定为什么您的示例不起作用,但我会尝试数据修改 CTE:
WITH insert_result AS (
INSERT INTO ... RETURNING *
)
SELECT your_function_here(insert_result.*)
在 https://www.postgresql.org/docs/current/queries-with.html#QUERIES-WITH-MODIFYING
查看更多要将 record/row 传递给函数,您需要明确指定记录类型:
create table t(a int, b text);
create or replace function f(r record) returns int language plpgsql as $$
begin
return r.a;
end $$;
insert into t values(2, 'b');
select f(t.*), f(t), f((a,b)::t) from t;
f | f | f
---+---+---
2 | 2 | 2
insert into t values(3, 'c') returning f(t);
f
---
3