如何在db2中使用一个sql脚本插入多个表
例如,在T1 DOCK_DOOR中插入一行,然后根据第一个表中的dock_door_sysid多次插入T2 DOCK_DOOR_LANE.
我的第一个方法如下.我试图使用带有三个插入的with.另一方面,如果可以通过一个插入自动执行,则在第二个表上进行插入不是和选项.
感谢您的任何反馈
sql示例
WITH ins AS (
INSERT INTO DBF1.DOCK_DOOR (DOCK_DOOR_SYSID,DOOR_NUMBER,DOOR_NAME,DOCK_SYSID,DOOR_SEQ,ENCRYPTION_CODE,RFID_ENBLD_FLAG,LANES_COUNT,CMNT_TEXT,CREATE_TS,CREATE_USERID,UPDATE_TS,UPDATE_USERID,VER_NUMBER,ACTIVE_FLAG,STATUS_SYSID,DOOR_TYPE_SYSID)
VALUES (nextval for DBF1.DOCK_DOOR_SEQ,'026','DOOR025',61,25,NULL,'N','2',NULL,current timestamp,'SQL_INSERT',current timestamp,'SQL_INSERT',0,NULL,1723,1142)
RETURNING door_number,dock_door_sysid),
ins2 AS (
INSERT INTO SIT.DOCK_DOOR_lane (DOCK_DOOR_LANE_SYSID,DOOR_LANE_ID,DOCK_DOOR_SYSID,LANE_ID,CREATE_TS,CREATE_USERID,UPDATE_TS,UPDATE_USERID,VER_NUMBER)
VALUES (nextval for DBF1.DOCK_DOOR_LANE_seq,door_number||''||'A',dock_door_sysid,'A',current timestamp},'SQL_INSERT',current timestamp,'SQL_INSERT',0)
SELECT door_number,dock_door_sysid FROM DBF1.DOCK_DOOR
RETURNING door_number,dock_door_sysid)
INSERT INTO DBF1.DOCK_DOOR_lane (DOCK_DOOR_LANE_SYSID,DOOR_LANE_ID,DOCK_DOOR_SYSID,LANE_ID,CREATE_TS,CREATE_USERID,UPDATE_TS,UPDATE_USERID,VER_NUMBER)
VALUES (nextval for DBF1.DOCK_DOOR_LANE_seq,door_number||''||'B',dock_door_sysid,'B',current timestamp},'SQL_INSERT',current timestamp,'SQL_INSERT',0)
SELECT door_number,dock_door_sysid FROM DBF1.DOCK_DOOR;
表1 = dock_door
表2 = Dock_door_lane
最佳答案 您可以使用dock_door表上的触发器来执行此操作.
但是,如果您使用的是IBM i上的最新版本.您可以使用data change table reference
你的陈述看起来像这样
insert into dock_door_lane
select <....>
from final table (insert into dock_door <...>)
我不确定它是否会起作用,因为article表明至少在几年前DB2 for i不支持所需的辅助插入.
这个旧的SO question似乎也证实至少在v7.1,不支持双插入.
如果我有机会,我将在周一对7.2系统进行测试.