2017-03-04 171 views
3

如何將在DB2如何將數據同時插入兩個表中,只有一個sql腳本db2?

例如插入到多個表與一個SQL腳本,將行插入T1 DOCK_DOOR然後DOCK_DOOR_LANE多次插入到T2基於所述dock_door_sysid從第一個表。

我的第一個方法如下。我試圖與三個插入一起使用。另一方面,如果可以通過一個插件自動執行,則插入到第二個桌子上的操作不是和可選的。 感謝您的反饋

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 =​​

表2 = Dock_door_lane

+0

這是一個很好的問題,但我不認爲有一個等值。在Oracle中有一個INSERT FIRST和INSERT ALL。在SQL Server中,有一個OUTPUT子句可讓您鏈接多個操作。是否有任何理由不能將所有INSERT都包含在事務中? –

+0

感謝您的反饋凱德。我希望這對DB2來說可能是可能的,因爲用SQL連續插入三個插入的確解決了這個難題,但這隻有在需要插入少量記錄時纔有用。簡而言之,我希望避免這種情況,而不必編寫一個小程序來自動化流程。 –

回答

2

您可以用在​​表的觸發器做到這一點。

但是,如果您使用IBM i的最新版本。您可能能夠利用data change table reference

你的語句將是這個樣子

insert into dock_door_lane 
    select <....> 
    from final table (insert into dock_door <...>) 

我不知道它會工作,因爲這article表明,至少在幾年前DB2因爲我不支持所需的二級插入。

這個舊的SO question也似乎證實,至少在v7.1,雙插入不支持。

如果我有機會,我會在星期一對7.2系統進行測試。

+1

運行v7.2 TR 4時,插入中不支持數據更改表引用。我收到一個SQ20165錯誤。我也沒有看到v7.3的「新增功能」部分中的任何內容,表明限制已解除。 – Charles

相關問題