我尝试了以下几种变体,但我仍然遇到错误。任何方法来解决这个问题。 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 ErrorCode:-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”无效。预期的代币可能包括:“价值”。 SQLSTATE = 42601
SQLState:42601 ErrorCode:-199
答案 0 :(得分:6)
不幸的是(我从未理解为什么),在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'