我手头有一个棘手的问题,合并查询如下: -
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包含在合并查询中检查匹配的列。
另外需要注意的是,此查询可以同时从两个会话运行,但这不应该是一个问题,因为合并必须在实际更新之前获取该行的锁定。请帮忙。提前谢谢。
答案 0 :(得分:1)
您确实已对目标表进行约束,但源表中没有关于约束的信息。如果在源表中有两个具有相同键的记录,则会尝试插入并且约束失败。
System.IO.File.SetAttributes(strFileFullPath, FileAttributes.Normal);
System.IO.File.Delete(strFileFullPath);