Sql 如何使用复合键加载表
我正在尝试使用SQL加载下表。在我的Ldirectory表中,我将Sql 如何使用复合键加载表,sql,oracle,oracle11g,Sql,Oracle,Oracle11g,我正在尝试使用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_KE
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列本身视为主键,但该列只有一个相同的值。错误消息应该指示违反的唯一约束的名称。假设所讨论的约束是主键,而不是表上定义的其他唯一约束,并且假设主键约束是在
SY
和LIDENTIFIER
组合上定义的复合约束,这意味着您的查询返回的是重复的行
您正在运行的查询为SY
返回硬编码值2013。因此,如果结果中有任何两行D.code
相同,则您可能会期望违反约束。您确定希望D.code
在整个结果集中是唯一的吗?根据对象的名称很难猜测(不知道D
可能代表什么,不知道D\u YEAR
为什么会有PHONE\u NUMBER
列,等等)但我倾向于猜测D
中的一行可能映射到D_年的多行,在这种情况下,结果中会有多行具有相同的D.code
值,因此违反了约束
如果您确信查询不应返回具有相同D.code
值的任何两行,则可以使用DML错误日志记录将违反约束的行写入错误表,以便分析问题。是否可以显示table create语句?您可能在SY
和/或“LIDENTIFIER”(或另一列)上分别定义了唯一的约束。或者你的选择返回了重复的D.code值谢谢你的帮助谢谢你的回复Justin。实际上有一个重复的行导致了此错误。