DB2 / SQL:检索已修改或插入的ID列表

问题描述 投票:0回答:2

关于DB2 / 400 SQL(以及一般的SQL)的问题:有没有办法在不通过重型机制记录的情况下检索“更新”或“插入”请求后修改或插入的ID列表?

提前感谢您的想法或您对该问题的看法。

谢谢

sql db2-400
2个回答
0
投票

如果每行都有唯一的ID,则只需创建ID的临时数据集,然后更新/插入数据即可。

对于插入,其他答案将起作用。

要进行更新,您可以执行以下操作。

Declare global temporary table updatedID
( <ID NAME> <ID TYPE> );
Insert into session.updatedID
Select <ID> from <TABLE> where <CONDITIONAL CLAUSE>
;
Update <TABLE> set <SET STATMENTS> where <ID> in (Select <ID NAME> from session.updatedID)
;
--Optional
Drop table updateID;

它有点向后工作,但最简单的方法是避免必须处理日志并避免通过记录迭代文件记录来更新(使用FOR循环)。


1
投票

正如注释中所建议的......对于插入,请使用插入的SELECT <..> FROM FINAL TABLE版本

  CREATE TABLE EMPSAMP 
    (EMPNO     INTEGER GENERATED ALWAYS AS IDENTITY,
     NAME      CHAR(30),
     SALARY    DECIMAL(10,2),
     DEPTNO    SMALLINT,
     LEVEL     CHAR(30),
     HIRETYPE  VARCHAR(30) NOT NULL DEFAULT 'New Employee',
     HIREDATE  DATE NOT NULL WITH DEFAULT)


SELECT EMPNO, HIRETYPE, HIREDATE
  FROM FINAL TABLE ( INSERT INTO EMPSAMP (NAME, SALARY, DEPTNO, LEVEL)
                                 VALUES('Mary Smith', 35000.00, 11, 'Associate'))

如果存在插入触发器或参考约束以更改插入的数据,则使用上述FINAL TABLE将导致错误。你可以用NEW TABLE代替。然而,NEW TABLE的结果来自触发器和参考约束之前。因此,表中最终的数据可能与返回的数据不同。

不幸的是,data-change-table-reference声明没有相应的UPDATE ..

你的更新用例是什么?

© www.soinside.com 2019 - 2024. All rights reserved.