我们有一个场景,我们需要向不同的表添加多行,获取生成的主键 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 来做到这一点:
您可以通过将除最后一个之外的所有语句包装在 CTE 中来以这种方式链接多个 DML 语句。
小提琴