ORA-01442: column to be modified to NOT NULL is already NOT NULL

        前两天自己想改变下表中一个字段的约束,没有想到就出现这个问题!当时一直在很奇怪,为什么desc看到的明明是可以为空,但是就是更改失败呢!后来才知道是因为约束失效导致的!今天特意又重新模拟了下!

        1,模拟环境

              create table  test(name varchar2(20) not null novalidate);

             -- 修改字段约束

             SQL> alter table test modify name not null;
 
            alter table test modify name not null
 
            ORA-01442: column to be modified to NOT NULL is already NOT NULL

            出现了ora-01442,这是因为在建表时,使用了约束失效(novalidate)的限制。

       2,查询约束的当前状态信息

            SQL> select constraint_name,constraint_type,status,validated
                   2  from user_constraints
                   3  where constraint_name in (select constraint_name from user_cons_columns where table_name='TEST' and column_name='NAME');
 
                   CONSTRAINT_NAME                CONSTRAINT_TYPE         STATUS      VALIDATED
                    ------------------------------                 ---------------                            --------        -------------
                            SYS_C005247                            C                                   ENABLED   NOT VALIDATED

            约束的状态为ENABLED但是VALIDATED为无效,所以这个表的约束失效,导致可以插入空值!

      3,解决问题

            --将约束改为有效即可

           SQL> alter table test enable validate constraint SYS_C005247;
 
                      Table altered

           SQL> alter table test modify name  null;
 
                      Table altered
 
          SQL> desc test;
                     Name Type         Nullable Default Comments 
                     ---- ------------ -------- ------- -------- 
                     NAME VARCHAR2(20) Y                         
                     ID   INTEGER      Y                         
          SQL> alter table test modify name not null;
 
                    Table altered
 
          SQL> desc test;
                     Name Type         Nullable Default Comments 
                     ---- ------------ -------- ------- -------- 
                     NAME VARCHAR2(20)                           
                     ID   INTEGER      Y     

所以当遇到修改约束不成功的时候,应该先看看约束是否失效,如果失效就必须将约束改为有效后才能修改约束条件!

           

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值