Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.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
Oracle 在空表上违反了唯一约束_Oracle_Ora 00001 - Fatal编程技术网

Oracle 在空表上违反了唯一约束

Oracle 在空表上违反了唯一约束,oracle,ora-00001,Oracle,Ora 00001,我最近收到一个案例,我的客户遇到了ORA-00001:唯一约束违反错误。当程序试图截断两个表,然后向其中插入数据时,就会发生这种情况。 从错误日志文件中,截断步骤已完成, 从INTERNET\u组中删除 从INTERNET_项目中删除 但就在这之后,对Internet_组表的插入触发了ORA-00001错误。我想知道是否有任何与此错误相关的数据库设置?我从未使用过Oracle,我想知道Oracle是否会用SELECT语句锁定一行,在这种情况下,该行会被锁定而不会被删除?非常感谢您的帮助。请了解截

我最近收到一个案例,我的客户遇到了ORA-00001:唯一约束违反错误。当程序试图截断两个表,然后向其中插入数据时,就会发生这种情况。 从错误日志文件中,截断步骤已完成, 从INTERNET\u组中删除 从INTERNET_项目中删除


但就在这之后,对Internet_组表的插入触发了ORA-00001错误。我想知道是否有任何与此错误相关的数据库设置?我从未使用过Oracle,我想知道Oracle是否会用SELECT语句锁定一行,在这种情况下,该行会被锁定而不会被删除?非常感谢您的帮助。

请了解截断和删除之间的区别。您说您截断了表,但您提到了“从中删除”。这是完全不同的。 如果确定要清空表,请尝试替换为

truncate table internet_group reuse storage;
请注意,truncate语句不需要commit,因为它被视为DDL(数据定义语言)语句,而不是像updates和deletes这样的DML(数据修改语言)语句

此外,在选择上没有行锁定。但更改仅在提交时应用于数据库中的其他会话并对其可见。 我想这是怎么回事;您删除了记录,但没有执行提交(尚未),随后插入了新记录

编辑: 我现在意识到您可能正在插入多个记录。。。。
另一个选项可能是,数据本身会导致冲突。你能在表格上提供约束条件吗?必须有主键或唯一约束。您可能希望将其保留在数据集上。

truncate!=删除,但可能不相关。您确定它没有尝试插入多个冲突行吗?当然,插入的数据本身必须是唯一的,而不仅仅是与现有数据相比。您确定删除操作没有回滚—发生这种情况后是否检查了表中的数据?(你可能有一个损坏的索引或其他东西,但先排除明显的)你能给出一个可重复的例子吗?或者至少涉及到DDL/DML?是否提交了删除?听起来像是大容量插入—在同一个大容量中,您使用相同的键插入多行。如何插入表格中?是否使用“插入作为选择”?