如何只使用一个sql脚本db2将数据同时插入两个表?

如何在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系统进行测试.

点赞