您的位置:首页 > 房产 > 建筑 > Oracle报错:ORA-02292: 违反完整约束条件 - 已找到子记录问题解决

Oracle报错:ORA-02292: 违反完整约束条件 - 已找到子记录问题解决

2024/10/6 20:26:09 来源:https://blog.csdn.net/HJW_233/article/details/139807254  浏览:    关键词:Oracle报错:ORA-02292: 违反完整约束条件 - 已找到子记录问题解决

目录

一、问题详情

二、原因分析

三、解决方案


一、问题详情

使用Mybatis删除数据的时候,报了如下错误详情:

org.springframework.dao.DataIntegrityViolationException: 
### Error updating database.  Cause: java.sql.SQLException: ORA-02292: 违反完整约束条件 (TEST.FK_TEST_FUE) - 已找到子记录

### The error may exist in com/example/project/test/mapper/TestMapper.java (best guess)
### The error may involve defaultParameterMap
### The error occurred while setting parameters
### SQL: DELETE FROM test WHERE id IN (     ?    )
### Cause: java.sql.SQLException: ORA-02292: 违反完整约束条件 (TEST.FK_TEST_FUE) - 已找到子记录

; ORA-02292: 违反完整约束条件 (TEST.FK_TEST_FUE) - 已找到子记录
; nested exception is java.sql.SQLException: ORA-02292: 违反完整约束条件 (TEST.FK_TEST_FUE) - 已找到子记录

   at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:251)
   at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:70)
   at 

二、原因分析

这个错误是因为在删除数据时,被删除的数据行存在其他表的外键约束关联,即已存在子记录。在数据库设计中,外键约束(FK_TEST_FUE)要求在删除父表数据之前先删除所有相关的子表数据,否则会触发这个异常。

三、解决方案

先删除外键约束所在的表数据,再删除主表数据就解决了,可以先根据以下SQL查询:

SELECTa.constraint_name,a.table_name,b.constraint_name 
FROMuser_constraints a,user_constraints b 
WHEREa.constraint_type = 'R' AND b.constraint_type = 'P' AND a.r_constraint_name = b.constraint_name AND a.constraint_name = 'FK_TEST_FUE';

这样我们就可以查询出:外键约束的名称(a.constraint_name)、外键约束所在的表名(a.table_name)、以及相关的主键约束的名称(b.constraint_name)。

获取到a.table_name的表名,通过父表的主键去删除a.table_name表中的子数据即可。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com