MERGE INTO 触发指定重复键值

问题描述 投票:0回答:1

表 A 的结构很简单:

ID
FOREIGN_ID
ORIGIN

FOREIGN_ID
ORIGIN
上方有一个唯一的键以防止重复。

表 B 有很多字段,但有趣的是

ORIGIN_ID
ORIGIN

表 B 可以有许多具有相同 origin 和 origin_id 的行。我的目标是在表 B 上创建一个插入触发器,仅将唯一的

ORIGIN_ID/ORIGIN
组合插入到表 A 中。

但首先,我需要制作一个工作插入,以避免插入重复项。在触发器中时,将使用表 B 行中的值,而不是这些硬编码值

MERGE INTO MYLIB.TABLE_A AS TARGET
USING
        ( SELECT FOREIGN_ID , ORIGIN FROM MYLIB.TABLE_A ) AS SRC
        ON SRC . FOREIGN_ID = '123' AND SRC . ORIGIN = 'ABC'
WHEN NOT MATCHED THEN
        INSERT ( FOREIGN_ID , ORIGIN ) VALUES ( '123' , 'ABC' ) 

我第一次执行该语句时,它按预期工作。表 A 中添加了一行。
第二次执行时,我希望它什么也不做,没有错误。

但是我明白了

[Code: -803, SQL State: 23505]  [SQL0803] Duplicate key value specified.

我遗漏了什么或做得不正确?

db2-400
1个回答
0
投票

这不是硬编码测试合并的方法...

您想使用“表值构造函数”(TVC)。

试试这个(扩展到 2 行,以便您可以了解如何使用 TCV):

MERGE INTO MYLIB.TABLE_A AS TARGET
USING
  ( values ('123','ABC'),('456','DEF')) as SRC (FOREIGN_ID, ORIGIN)
on SRC.FOREIGN_ID TARGET.FOREIGN_ID = AND SRC.ORIGIN = TARGET.ORIGIN
WHEN NOT MATCHED THEN
        INSERT ( FOREIGN_ID , ORIGIN ) VALUES ( SRC.FOREIGN_ID, SRC.ORIGIN );
© www.soinside.com 2019 - 2024. All rights reserved.