Oracle中错误代码ORA-02292 违反了完整性约束条件解决

本文详细介绍了如何通过禁用主键约束来解决Oracle数据库中删除被引用主键的记录时遇到的ORA-02292错误。包括禁用、删除记录、启用约束的步骤,并分享了开发过程中的一个实际案例,说明了在使用PL/SQL进行数据操作时,如何正确处理被引用的主键问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

百度处理:

A表被B表引用,删除A表的时候提示ORA-02292,A表的主键被引用了,虽然已经把B表的数据全部删除掉,但仍然删除不了A表的数据。
解决办法:
 用禁用约束语句把A表的主键约束给禁用掉。
1、禁用约束:alter table 表名 disable constraint 主键   CASCADE
 2、删除A表的数据
 3、启用约束:alter table 表名 enable constraint 主键
OK,大功告成。注意,禁用的时候一定要加 CASCADE。

我的处理方法(也是参照上面的):

我的问题是,A,B是同一张表,但是删除不了记录。 PL/SQL执行代码:delete from LDMenu where NodeCode='1923',就会报ORA-02292.

我在这里,表明上面问题注意点:

1.首先查看LDMenu表的主键是啥,在PL/SQL中右键表明View.选择keys,会有一行记录,有Name,,Type,Columns等字段。这里注意Name是约束名,Columns是表的字段名。

2.我的sql如下,基本是按照百度上面说的做的。一定要注意constraint 后面的字段是约束名,而不是表的字段名。

alter table ldmenu disable constraint PK_LDMENU CASCADE  

delete from LDMenu where NodeCode='1923'

 alter table ldmenu enable constraint PK_LDMENU

3.百度上面说的注意,的确也要注意。处理完后也要将之前的禁用启动。删除的时候也要提交,这是pl/sql的知识,至此问题解决完毕。

近日开发收获:其实开发工具还是Oracle报的错,一般都搬的很对。报你主键被引用就是被引用,Java报你控制针就是有空指针。先回顾昨天开发中出现的问题,我SIT更新完jsp后,一直报一个name变量无法编译或者没有定义之类的错误,我在SIT上查看,我已经都修改过了,为什么还是报错,以为是WebSpere没有生效(有时候的确有这个情况发生)。重启WebSpere还是不生效,然后我就想是不是jsp到class文件没有编译,我又到服务器上删除jsp编译后的class文件。最后重启还是报name变量未定义同样错误。这个时候,我仔细检查修改后的jsp页面。结果是一个System.out...语句写成name.out...。显然这里的name变量不对,无法调方法。改后,SIT生效。

 

 

转载于:https://www.cnblogs.com/zhangyue086/p/3375659.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值