Db2
從 db2 FINAL TABLE 保存結果
我們有一個場景,我們需要向不同的表添加多行,獲取生成的主鍵 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 語句。