sách gpt4 ai đã đi

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

In lại 作者:行者123 更新时间:2023-11-29 13:58:59 27 4
mua khóa gpt4 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

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

1 Câu trả lời

对不起,如果我没听懂你的意思。但是为什么不使用 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
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com