oracel报错ORA-02292的解决方法

一个表的外键是另一表的主键,用来和其它表建立联系用的。
外键是指在表中定义外键的字段的列的值必须在另一张表中出现。外键是用来实现参照完整性的方法之一。
被参照的表称为父表,创建外键的表称为子表。子表中的外键关联的是父表中的主键。

如果想要修改父表(某表定义的外键是这个表的主键)的主键时,会报错ORA-02292

图片中的bicp.r_ug_uid是用户名.约束名。
通常的解决方法是先禁用该约束,也就是先让子表的外键失效,然后再修改父表的主键信息,子表的外键也要做出一样的修改,之后再启用该约束。

具体方法如下:
首先我们要根据约束名来定位子表是哪张表,根据约束名查找子表:
select * FROM all_constraints t WHERE t.constraint_name= 约束名;
其中查询记录中的table_name字段的值就是该子表。
接下来就是禁用该约束:
alter table 表名 disable constraint 约束名 CASCADE;
之后就可以修改父表的主键信息了,但是有一点需要注意,如果你修改父表主键内容后还想将该约束启用的话,那么子表的外键内容也需要做相应的修改,否则约束启用失败。
将子表的父表的外键主键修改成功以后就可以启用该约束了:
alter table 表名 enable constraint 约束名;

本人小白一枚,如果有什么错误希望大牛们批评指正。十分感谢!

posted @ 2018-09-11 16:38  小小短腿儿  阅读(1397)  评论(0)    收藏  举报