Temos um cenário em que precisamos adicionar várias linhas a tabelas diferentes, obter os IDs de chave primária gerados, criar mais inserções com FKs referindo-se aos IDs gerados anteriormente, etc. No SQL Server, você pode usar apenas a cláusula OUTPUT para armazenar os linhas e os IDs gerados e, em seguida, consulte-os. Mas aparentemente no db2 você não pode usar os resultados FINAL TABLE para nada além de um select.
Então, estamos procurando inserir um monte de dados de uma planilha do Excel na tabela A , depois combinar os IDs gerados no conjunto de dados do Excel e inserir mais linhas na tabela B, C, etc.
Existe uma maneira alternativa de armazenar os registros inseridos em um formato utilizável. De preferência sem algo que exija a compilação de um procedimento, então podemos apenas executar o script uma parte de cada vez? Um exemplo de quase código abaixo, que obviamente não funciona.
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
);
Você pode fazer isso tornando a instrução externa um select também:
Você pode encadear várias instruções DML dessa maneira, agrupando todas, exceto a última, em um CTE.
violino