0

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

但在此之后,插入 Internet_group 表触发了 ORA-00001 错误。我想知道是否有与此错误相关的任何数据库设置?我从未使用过 Oracle,我想知道 Oracle 是否使用 SELECT 语句对一行进行了锁定,在这种情况下,该行被锁定并且不会以某种方式被删除?任何帮助表示赞赏。

4

1 回答 1

1

请知道截断和删除之间是有区别的。你说你截断了表格,但你提到了“删除”。那是完全不同的。如果您确定要清空表格,请尝试替换为

truncate table internet_group reuse storage;

请注意,truncate 语句不需要提交,因为这被认为是 DDL(数据定义语言)语句,而不是像更新和删除这样的 DML(数据修改语言)语句。

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

编辑:我现在意识到您可能正在插入多条记录......另一种选择可能是,数据本身会导致违规。你能提供桌子上的约束吗?必须有主键或唯一约束。您可能希望将其保留在您的数据集上。

于 2017-03-07T14:21:58.740 回答