0

我正在尝试使用 SQL 加载下表。在我的 Ldirectory 表中,我将SYLIDENTIFIER作为主键的组合,我正在尝试运行此查询

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 列视为主键本身,但我对该列只有一个相同的值。

4

1 回答 1

1

错误消息应指出违反的唯一约束的名称。假设所讨论的约束是主键而不是在表上定义的其他一些唯一约束,并假设主键约束是定义在 和 的组合上的复合约束SYLIDENTIFIER正如您所指出的,这意味着您的查询正在返回重复的行。

您正在运行的查询返回 2013 的硬编码值SY。因此,如果结果中有任何两行相同,您会期望违反约束D.CODE。您确定您希望D.CODE在整个结果集中是独一无二的吗?根据对象的名称很难猜测(不知道D可能代表什么,不知道为什么D_YEAR会有一PHONE_NUMBER列等),但我倾向于猜测其中的一行D可能映射到多行,D_YEAR在这种情况下会有结果中的多行具有相同的D.CODE值,因此违反了约束。

如果您确信查询不应返回具有相同D.CODE值的任何两行,则可以使用 DML 错误日志记录将违反约束的行写入错误表,以便分析问题。

于 2012-12-13T17:49:57.583 回答