关于DB2 /400SQL(以及一般的SQL )的问题:是否有一种方法可以检索在"update“或"insert”请求之后修改或插入的in列表,而无需经过繁重的机械日志记录?
预先感谢你的想法,或你对这个问题的意见。
谢谢
发布于 2019-03-20 15:55:34
如果您已经为每一行创建了唯一的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循环)。
发布于 2019-03-20 15:21:45
如comment...for an insert中所建议的,使用插入的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的结果来自于前级触发器和引用约束。因此,表中的数据可能与返回的数据不同。
不幸的是,没有对应的https://www.ibm.com/support/knowledgecenter/en/ssw_ibm_i_73/db2/rbafztabref.htm用于UPDATE语句。
更新的用例是什么?
https://stackoverflow.com/questions/55259542
复制相似问题