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

前一段时间,某Schema下数据约束被设置为DISABLE后,SAR当时支援解决。几个月后,我在比对各Schema数据对象时,发现存在差异。报出ORA-01442 错误。

后了解到SAR在处理问题时,将资料库的约束设置为:启动非校验 。

 

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    

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

你可能感兴趣的:(Oracle)