我手头有一个棘手的问题,其中合并查询如下:-
MERGE INTO table_destination D USING table_source S
ON (D.id = S.id AND D.name_s = S.name_s AND D.seqno = S.seqno AND D.type_s = S.type_s)
WHEN NOT MATCHED THEN INSERT (D.class_v, D.id, D.name_s, D.seqno, D.VALID, D.IFSC_CODE, D.CREATOR, D.APPROVER, D.type_s) VALUES (S.class_v, S.id, S.name_s, S.seqno, S.VALID, S.IFSC_CODE, S.CREATOR, S.APPROVER,S.type_s)
WHEN MATCHED THEN UPDATE SET D.VALID = S.VALID
给出主键违规,因为 -unique constraint (schema_1.TBL_BRANCH_PK1) violated
目标表的DDL如下:-
CREATE TABLE table_destination
( "id" VARCHAR2(3 BYTE),
"name_s" VARCHAR2(3 BYTE),
"seqno" VARCHAR2(3 BYTE),
"NAME" VARCHAR2(50 BYTE),
"type_s" VARCHAR2(3 BYTE) NOT NULL ENABLE,
"IFSC_CODE" VARCHAR2(11 BYTE),
"VALID" NUMBER(1,0),
"CREATOR" VARCHAR2(22 BYTE),
"APPROVER" VARCHAR2(22 BYTE),
CONSTRAINT "TBL_BRANCH_PK1" PRIMARY KEY ("id", "name_s", "seqno", "type_s")
);
显然,被违反的 Pk 由合并查询中正在检查匹配的列组成。
另一件需要注意的是,这个查询可以同时从两个会话运行,但这应该不是问题,因为合并必须在实际更新行之前获得行的锁定。请帮忙。提前致谢。
您确实对目标表有约束,但源表中没有有关约束的信息。如果在源表中有两个具有相同键的记录,它们都将尝试插入并且约束失败。
create table t1 (id number);
create table t2 (id number, constraint tpk primary key (id));
insert into t1 values (1);
insert into t1 values (1);
commit;
merge into t2
using t1
on (t2.id = t1.id)
when not matched then insert values (t1.id);
SQL Error: ORA-00001: unique constraint (TPK) violated
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句