首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DB2 /SQL:检索修改或插入的ID列表

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

Stack Overflow用户
提问于 2019-03-20 11:18:58
回答 2查看 365关注 0票数 0

关于DB2 /400SQL(以及一般的SQL )的问题:是否有一种方法可以检索在"update“或"insert”请求之后修改或插入的in列表,而无需经过繁重的机械日志记录?

预先感谢你的想法,或你对这个问题的意见。

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-03-20 15:55:34

如果您已经为每一行创建了唯一的ID,则只需创建ID的临时数据集,然后更新/插入数据。

对于插入,另一个答案将有效。

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

代码语言:javascript
复制
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循环)。

票数 0
EN

Stack Overflow用户

发布于 2019-03-20 15:21:45

如comment...for an insert中所建议的,使用插入的SELECT <..> FROM FINAL TABLE版本

代码语言:javascript
复制
  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语句。

更新的用例是什么?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55259542

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档