Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 违反主键,但源或目标中没有重复项_Java_Sql_Oracle_Jdbc - Fatal编程技术网

Java 违反主键,但源或目标中没有重复项

Java 违反主键,但源或目标中没有重复项,java,sql,oracle,jdbc,Java,Sql,Oracle,Jdbc,正在引发 Caused by: oracle.jdbc.OracleDatabaseException: ORA-00001: unique constraint (CHK_INCLRNG_U.DDA_TRIAL_BAL_STG_PK) violated 数据源没有任何重复项。目标没有数据,因此不能重复。有趣的是,当我在表上运行计数时,我得到了数据的整个记录计数。所以它会在结尾处立即抛出这个。我的主键在CREATETABLE语句中定义如下 CONSTRAINT DDA_TRIAL_BAL_ST

正在引发

Caused by: oracle.jdbc.OracleDatabaseException: ORA-00001: unique constraint (CHK_INCLRNG_U.DDA_TRIAL_BAL_STG_PK) violated
数据源没有任何重复项。目标没有数据,因此不能重复。有趣的是,当我在表上运行计数时,我得到了数据的整个记录计数。所以它会在结尾处立即抛出这个。我的主键在CREATETABLE语句中定义如下

CONSTRAINT DDA_TRIAL_BAL_STG_PK PRIMARY KEY (FIRM_BNK_ID,ACCT_NB,BAT_PROC_DT)

不知道该怎么办。这并没有发生在更早的时候,也不确定我的团队中有人做了什么导致了这一点。不要相信在此表上创建了任何索引(我已经读到这可能会导致问题)


如果数据中没有真正的重复项,还有哪些问题会引发此错误?

在Oracle中,您可以使用日志错误捕获异常,并查看哪一行违反了约束

比如说

create table t1(col1 number);

create unique index t_ix on t1(col1);

begin
 dbms_errlog.create_error_log('t1');
end;

 --in your insert statement you will have the following statement appended
 log errors reject limit unlimited;

-- The error will be captured in
select * from err$_t1;

错误消息告诉您违反的是主键唯一约束。如果您的目标没有数据,那么删除该表并再次尝试插入不会有什么影响,如果仍然出现错误,那么您的源数据中肯定有重复项,用于插入到主键列中的内容。我建议你仔细检查一下(并检查你的insert语句,确保正确的数据进入正确的列)@AndrewSayer我没有任何重复项。我对文件运行了sort-u,为了安全起见,我只对文件的键值运行了sort-u。记录计数仍然相同。我已多次删除该表并重试。我认为重要的是要指出,这是在最后发生的。而不仅仅是在最后一条记录上,比如在插入最后一条记录之后。引发异常且我的应用程序失败后,表中的计数就是该文件的计数。为什么在写入所有数据后会抛出该异常?所有的记录我们基本上都成功了。“不要相信在这个表上创建了任何索引”-你是什么意思?您的表有一个主键;如果您没有明确指示Oracle使用现有索引,则Oracle会在PK上创建一个唯一索引。那么,我再问一次——你这是什么意思?我想到的一件显而易见的事情是,数据没有问题,但是插入过程有问题。例如,无论出于何种原因,尝试了多次。这就是为什么(可能!)插入正确的行,并且看起来好像在插入所有行之后立即抛出错误。一旦尝试性地再次插入第一行,就会抛出错误。@mathguy抱歉,这可能会导致混淆。我的意思是没有创建索引,因为我在某个地方读到额外的索引(主键之外)可能导致这个问题。因此,我们只是澄清,除了主键约束之外,没有在这个表上创建任何索引。至于你的第二个评论,我认为可能是这样。不管什么原因,idk。现在我们来测试一些东西。