gpt4 book ai didi

sql - INSERT 新记录并将生成的主键用于另一个 INSERT

转载 作者:行者123 更新时间:2023-11-29 13:58:59 27 4
gpt4 key购买 nike

如果我想从单个插入中保存主键 (mytable_id),我已完成以下操作:

CREATE OR REPLACE FUNCTION myfunct(ownerid text) RETURNS void AS 
$$
DECLARE myvar INTEGER;

BEGIN

INSERT INTO mytable (long_description) VALUE 'testing';

SELECT CURRVAL('mytable_mytable_id_seq') INTO myvar;

END;
$$
LANGUAGE plpgsql;

问题是,我现在想对多个插入执行相同的操作。我想插入一行,并获取新插入行的主键并将其用作另一个插入中的外键。

所以我有

DECLARE myvar2 INTEGER;

INSERT INTO mytable (long_description)
SELECT DISTINCT type FROM schema1.myothertable WHERE type IS NOT NULL;

INSERT INTO mytable2 (foreign_key1, foregin_key2)
VALUES (myvar, myvar2); -- somewhere pk from mytable is stored in myvar2

有没有办法在同一个查询中执行这两个插入?
我想避免循环,但我不确定没有它是否可以做到这一点。

最佳答案

对不起,如果我没听懂你的意思。但是为什么不使用 nextval 一次呢? Postgres 函数总是事务,所以没有危险,如果你这样做:

CREATE OR REPLACE FUNCTION myfunct(ownerid text) RETURNS void AS 
$$
DECLARE
nextId INTEGER;
BEGIN
SELECT nextval('mytable_mytable_id_seq') INTO nextId;
INSERT INTO mytable (id, long_description) values (nextId, 'testing');
INSERT INTO othertable (id, whatever) values (nextId, 'whatever');
END;
$$
LANGUAGE plpgsql;

然后您可以使用完全相同的 pk/fk 插入任何您想要的内容。

关于sql - INSERT 新记录并将生成的主键用于另一个 INSERT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25066119/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com