Db2

從 db2 FINAL TABLE 保存結果

  • October 1, 2021

我們有一個場景,我們需要向不同的表添加多行,獲取生成的主鍵 ID,然後使用 FK 引用先前生成的 ID 等創建更多插入。在 SQL Server 上,您可以只使用 OUTPUT 子句來儲存插入的行和生成的 ID,然後引用它們。但顯然在 db2 上,除了選擇之外,您不能將 FINAL TABLE 結果用於任何內容。

因此,我們希望將 excel 表中的一堆數據插入到表A中,然後將生成的 ID 匹配到 excel 數據集中,並在表****B、C等上插入更多行。

是否有另一種方法可以以可用的格式儲存插入的記錄。最好沒有需要編譯程序的東西,這樣我們就可以一次執行執行腳本嗎?下面是一個準程式碼範例,這顯然行不通。

DECLARE GLOBAL TEMPORARY TABLE SESSION.TEMP
   (ITEM_IDENTIFIER,
   TABLE1_ID INT) 
ON COMMIT PRESERVE ROWS;

INSERT INTO SESSION.TEMP (ITEM_IDENTIFIER, TABLE1_ID)
SELECT IDENTIFIER, ID
FROM FINAL TABLE 
   (INSERT INTO MYSCHEMA.MYTABLE (IDENTIFIER, ID /*...other columns*/)
   SELECT *
   FROM 
       (SELECT 'asd123' IDENTIFIER /*...other columns*/ FROM SYSIBM.SYSDUMMY1
       UNION
       SELECT 'bsb234' /*...other columns*/ FROM SYSIBM.SYSDUMMY1
       UNION
       SELECT 'dasd654_' /*...other columns*/ FROM SYSIBM.SYSDUMMY1
       /* etc.. */) s
   );

您也可以通過將外部語句設為 select 來做到這一點:

WITH T (ITEM_IDENTIFIER, TABLE1_ID) AS (
 SELECT IDENTIFIER, ID
 FROM FINAL TABLE 
   (INSERT INTO MYSCHEMA.MYTABLE (IDENTIFIER, ID /*...other columns*/)
   SELECT *
   FROM 
       (SELECT 'asd123' IDENTIFIER /*...other columns*/ FROM SYSIBM.SYSDUMMY1
       UNION
       SELECT 'bsb234' /*...other columns*/ FROM SYSIBM.SYSDUMMY1
       UNION
       SELECT 'dasd654_' /*...other columns*/ FROM SYSIBM.SYSDUMMY1
       /* etc.. */) s
   )
)
SELECT * FROM FINAL TABLE (
 INSERT INTO SESSION.TEMP (ITEM_IDENTIFIER, TABLE1_ID)
 SELECT ITEM_IDENTIFIER, TABLE1_ID FROM T
)

您可以通過將除最後一個之外的所有語句包裝在 CTE 中來以這種方式連結多個 DML 語句。

小提琴

引用自:https://dba.stackexchange.com/questions/300396