在 DB2 中使用 MERGE 命令时出错

Posted

技术标签:

【中文标题】在 DB2 中使用 MERGE 命令时出错【英文标题】:Error when using the MERGE command in DB2 【发布时间】:2019-04-30 13:09:41 【问题描述】:

我正在尝试使用 DB2 v11 中的MERGE 命令更新或插入数据到表中。但是我不断收到错误:

SQL0723N 触发器“TRACE_AFTE”中的触发 SQL 语句发生错误。 针对错误返回的信息包括 SQLCODE “-746”、SQLSTATE “57053”和消息标记 “CUSTOM_AFTER_UPDAT|SP_CUSTOM_AFTER_U”。 SQLSTATE=09000"

我查看了错误,它说例程与表的使用冲突..表已在使用中。

我尝试将查询更改为基于 VALUES 而不是表进行更新,但在意外令牌上出现错误

SQL0104N 在“MATCHED THEN”之后发现了意外的标记“INSERT”。 预期的标记可能包括:“”。 SQLSTATE=42601 "

MERGE INTO TRACE target 
USING IMPORT_RAW source
     ON target.DETAIL_NUMBER = source.DETAIL_LINE_ID
          AND target.DESC = source.TRACE_TYPE
WHEN MATCHED THEN
   UPDATE SET NUMBER = source.PRO

VALUES

MERGE TRACE AS T
USING IMPORT_RAW AS S
      ON (T.DETAIL_NUMBER= S.DETAIL_LINE_ID) AND T.DESC = S.TRACE_TYPE
WHEN NOT MATCHED BY TARGET     
THEN INSERT(DETAIL_NUMBER, TRACE_NUMBER) VALUES(S.DETAIL_LINE_ID, S.CARRIER_PRO)
WHEN MATCHED 
     THEN UPDATE SET T.NUMBER= S.PRO;

查询应该从存在记录的Import_raw 表中更新多条记录,并在不存在记录的地方导入。

我做错了什么?

【问题讨论】:

定义了什么类型的触发器?查看合并规则ibm.com/support/knowledgecenter/SSEPGG_11.1.0/… 【参考方案1】:

感谢您的帮助。似乎问题在于它试图合并同一记录两次。我的截断表已被注释掉。

【讨论】:

以上是关于在 DB2 中使用 MERGE 命令时出错的主要内容,如果未能解决你的问题,请参考以下文章

尝试启动 DB2 实例时出错。返回代码为2 , SQL消息 为: PROCESS_ERROR

将数据加载到远程 DB2 服务器时出错

创建简单的 DB2 sql 过程时出错

创建简单的DB2 sql过程时出错

在 db2 中创建过程时出错

尝试使用 Python 连接 DB2 上的表时出错 (SQL0332N)