DB2 / SQL:retrieve修改或插入的ID列表
DB2 / SQL:retrieve the list of IDs modified or inserted
关于 DB2 / 400 SQL(以及 SQL 的一般问题):是否有办法检索在 "update" 或 [= 之后修改或插入的 ID 列表18=] 不经过重型机械日志记录的请求?
提前感谢您的想法或对这个问题的看法。
谢谢
如评论中所建议...对于插入,使用 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
的结果来自前后触发器和引用约束。因此,最终在 table 中的数据可能与返回的数据不同。
不幸的是,UPDATE
语句没有等效的 data-change-table-reference..
更新的用例是什么?
如果您已经为每一行创建了一个唯一的 ID,您可以只创建一个临时的 ID 数据集,然后 update/insert 数据。
对于插入,其他答案也可以。
要更新,您可以执行以下操作。
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 循环)的最简单方法。
关于 DB2 / 400 SQL(以及 SQL 的一般问题):是否有办法检索在 "update" 或 [= 之后修改或插入的 ID 列表18=] 不经过重型机械日志记录的请求?
提前感谢您的想法或对这个问题的看法。
谢谢
如评论中所建议...对于插入,使用 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
的结果来自前后触发器和引用约束。因此,最终在 table 中的数据可能与返回的数据不同。
不幸的是,UPDATE
语句没有等效的 data-change-table-reference..
更新的用例是什么?
如果您已经为每一行创建了一个唯一的 ID,您可以只创建一个临时的 ID 数据集,然后 update/insert 数据。
对于插入,其他答案也可以。
要更新,您可以执行以下操作。
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 循环)的最简单方法。