DB2 MERGE 语句错误

Posted

技术标签:

【中文标题】DB2 MERGE 语句错误【英文标题】:DB2 MERGE statement error 【发布时间】:2013-11-01 19:27:26 【问题描述】:

我已经尝试了以下几种变体,但我仍然遇到错误。任何解决此问题的方法。 DB2 10.1(DB2 for z/OS V10)

为了以下

MERGE INTO TRGT t
USING SRC s
ON (t.ACCTID=s.ACCTID AND s.SEQID=123)
WHEN MATCHED THEN
UPDATE SET
MyFlag = 'Y'

错误: 在“”之后发现了一个意外的令牌“SRC”。预期的标记可能包括:“(”。SQLSTATE=42601

SQL 状态:42601 错误代码:-104


但是对于以下情况

MERGE INTO TRGT t
USING (SELECT SEQID, ACCTID FROM SRC WHERE SEQID=123) s
ON (t.ACCTID=s.ACCTID)
WHEN MATCHED THEN
UPDATE SET
MyFlag = 'Y'

错误: 在“”之后使用保留字“SELECT”是无效的。预期的标记可能包括:“VALUES”。 SQLSTATE=42601

SQL 状态:42601 错误代码:-199

【问题讨论】:

【参考方案1】:

不幸的是(我一直不明白为什么),在 DB2 for z/OS 中,您不能使用表作为 MERGE 的源,您只能使用 VALUES 子句。此外,如果要合并多行,则必须使用host variable arrays,并指定数组中值的数量。

MERGE INTO TRGT t
USING (VALUES (:param1, :param2) FOR :paramNumRows) s
   ON (t.ACCTID=s.ACCTID)
 WHEN MATCHED THEN
     UPDATE SET MyFlag = 'Y'

【讨论】:

@RajuRaju:如果我的回答回答了您的问题,请“接受”它(投票按钮下方应该有一个复选标记来执行此操作)。您也可以投票给答案。

以上是关于DB2 MERGE 语句错误的主要内容,如果未能解决你的问题,请参考以下文章

面对 DB2 中的“未找到合并的行”错误

MERGE 语句错误

DB2 中的合并查询

为啥 MERGE 语句会抛出唯一键约束错误

DB2使用MERGE INTO语句实现西虹市首富的新增及更新操作

MERGE 语句错误