PostgreSQL:帮助我了解RETURNING
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PostgreSQL:帮助我了解RETURNING相关的知识,希望对你有一定的参考价值。
[抱歉,我不知道如何使用RETURNING,例如如何在下一步中“实际掌握”实际值。假设我有两个表:
create table "actors" (
id_act serial not null primary key,
first_name text not null,
last_name text not null
);
create table movies (
id_mov serial not null primary key,
act_id integer not null
);
现在我添加一个演员:
INSERT INTO actors (first_name, last_name) VALUES ('Tom', 'Hanks');
并且在那之后,我想使用那个新演员的ID来插入电影
INSERT INTO movies(###);
如何使用RETURNING代替占位符###?
谢谢!
答案
您需要在INSERT语句中使用RETURNING子句将返回的值存储在另一个变量中。
示例:
create or replace procedure insert_rows()
language plpgsql
as
$$
declare
v_id_act int;
begin
INSERT INTO actors (first_name, last_name) VALUES ('Tom', 'Hanks') RETURNING id_act INTO v_id_act;
INSERT INTO movies(act_id) values (v_id_act);
end;
$$;
CREATE PROCEDURE
call insert_rows();
CALL
select * from actors;
id_act | first_name | last_name
--------+------------+-----------
1 | Tom | Hanks
(1 row)
select * from movies;
id_mov | act_id
--------+--------
1 | 1
(1 row)
另一答案
您不需要PL / pgSQL即可使用RETURNING
,这也可以在普通SQL中使用。
但是对于您所遇到的问题,您不需要任何使用,因为您可以使用序列支持currval()
的actors.id
来获取最后生成的id
:
INSERT INTO actors (first_name, last_name) VALUES ('Tom', 'Hanks');
INSERT INTO movies(act_id) values
(currval(pg_get_serial_sequence('actors', 'act_id')));
如果您确实要使用RETURNING,则可以使用data modifying CTE
with new_actor as (
INSERT INTO actors (first_name, last_name) VALUES ('Tom', 'Hanks')
returning id_act
)
insert into movies (act_id)
select id_Act
from new_actor;
以上是关于PostgreSQL:帮助我了解RETURNING的主要内容,如果未能解决你的问题,请参考以下文章
PostgreSQL RETURNING 失败并出现 REGEXP_REPLACE
PostgreSql INSERT FROM SELECT RETURNING ID
如何在 PostgreSQL 中使用 RETURNING 和 ON CONFLICT?