5

我已经尝试了以下几种变体,但我仍然遇到错误。任何解决此问题的方法。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

SQLState: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

SQLState:42601 错误代码:-199

4

1 回答 1

6

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

MERGE INTO TRGT t
USING (VALUES (:param1, :param2) FOR :paramNumRows) s
   ON (t.ACCTID=s.ACCTID)
 WHEN MATCHED THEN
     UPDATE SET MyFlag = 'Y'
于 2013-11-02T17:46:03.193 回答