我正在尝试使用SQL加载下表。在我的Ldirectory表中,我将SY
和LIDENTIFIER
组合作为主键,我正在尝试运行此查询
insert into S_User.LDIRECTORY (SY,LIDENTIFIER,ONAME,TELNUMBER)
select 2013,D.CODE, D.NAME, D_YEAR.PHONE_NUMBER
from WHS.D WHS.D_YEAR
where WHS.D.D_KEY=WHS.D_YEAR.D_KEY
我收到的错误是:
SQL Error ORA-00001 unique constraint violated
Cause: An UPDATE or INSERT statement attempted to insert a duplicate key.
For Trusted Oracle configured in DBMS MAC mode, you may see
this message if a duplicate entry exists at a different level.
Action: Either remove the unique restriction or do not insert the key.
我该如何解决这个问题?我认为在插入过程中它将SY列视为主键本身,但我对该列只有一个相同的值。
答案 0 :(得分:1)
错误消息应指明违反的唯一约束的名称。假设所讨论的约束是主键而不是在表上定义的其他唯一约束,并假设主键约束是在SY
和LIDENTIFIER
的组合上定义的复合约束,如您所示,这意味着您的查询返回重复的行。
您正在运行的查询会为SY
返回2013年的硬编码值。因此,如果结果中的任何两行D.CODE
相同,则可能会违反约束。您确定您希望D.CODE
在整个结果集中是唯一的吗?很难根据对象的名称进行猜测(不知道D
可能代表什么,不知道为什么D_YEAR
会有PHONE_NUMBER
列等等,但我倾向于猜测D
中的一行可能会映射到D_YEAR
中的多行,在这种情况下,结果中会有多行具有相同的D.CODE
值,从而违反约束。
如果您确信查询不应返回具有相同D.CODE
值的任何两行,则可以使用DML错误日志记录将违反约束的行写入错误表,以便您可以分析问题