2011-05-18 48 views
1

我有一个表,其中一个约束已被设置在一个名为LoginId的字段上。当插入一个新行时,我在与此字段(LoginID)关联的这个constratint上发生错误,声明以下错误。没有重复,但仍然违反约束的错误

插入命令是下面: 类型1与序列

insert into TemplateModule 
(LoginID,MTtype, Startdate TypeId, TypeCase, MsgType, MsgLog, FileName,UserName, CrID, RegionaltypeId) 
values 
(MODS_SEQ.NEXTVAL,3434,2843,2453,2392,435,2390,'pension.txt','rereee',454545,3434); 
Failed with error 

2型无序列的硬编码值::

insert into TemplateModule 
(LoginID,MTtype, Startdate TypeId, TypeCase, MsgType, MsgLog, FileName,UserName, CrID, RegionaltypeId) 
values 
(3453,3434,2843,2453,2392,435,2390,'pension.txt','rereee',454545,3434) 

我为交叉检查什么duplicates.But多次found.What可能是根本原因

ORA-00001: unique constraint error (LGN_INDEX)violated 
+0

你如何填充你试图插入该字段的值? – Patrick 2011-05-18 12:46:08

+1

...你如何交叉检查它? – Mat 2011-05-18 12:47:42

+1

直接原因绝对是两个具有相同'LoginID'的记录。根本原因是由于某种原因,您认为进入该列的内容不是数据库获取的内容。那么,你有什么记录/追踪或你可以接通? – APC 2011-05-18 12:51:25

回答

1

首先,做一个描述在该表上的LGN_INDEX上,以确保您正在查看右栏。 LGN_INDEX是约束+索引还是索引?尝试重新构建您的索引以确保它没有损坏。确保您没有任何其他可能会干扰的限制条件。

其次,执行SELECT MAX(LOGINID) FROM TEMPLATEMODULE并将其与下一个序列值进行比较以确保您的序列未设置为低于您正在使用的最大ID。

第三,检查您是否在该表上有触发器。

如果这些都不起作用,请尝试仅使用架构重新创建表。交叉加载数据并重试。在该表上可能存在导致该问题的配置设置。 CREATE TABLE MY_TEMP AS SELECT * FROM TEMPLATEMODULE

+0

您提到的第一个和第二个被检查。第三个是触发器。为了创建序列,触发器被创建。由于触发器,这可能是问题 – user682571 2011-05-18 13:15:12

+0

这一切都取决于您的触发器在做什么。尝试禁用触发器(或创建没有触发器的表的副本),然后执行INSERT。这将消除一个可能会干扰的逻辑。 – 2011-05-18 13:17:52

+0

我没有足够的准备创建表的副本。只有dba可以做到这一点..是否有任何其他选择,除此之外? – user682571 2011-05-18 13:21:21

1

我遇到了同样的问题。

插入语句将一个Integer值(不在表中)填充到主键列。

问题是与序列绑定的前触发器。序列的next_val已经存在于表格中。

触发器触发,获取序列号并失败并出现主键违例。

0

我从excel文件导入时遇到同样的问题。我认为该文件没有重复,直到我尝试删除excel中的重复。

要找到并删除Excel中的重复,

  1. 选择数据。 Ctrl + a应该可以工作。
  2. 点击Data -> Remove Duplicates
  3. 选择在你的数据库中的约束栏,然后单击OK
  4. Excel中应该删除基于在上述步骤3中选择的字段的任何重复的记录。

您现在应该可以将文件中的记录导入到数据库中。

相关问题