Условие столбца NOT NULL
не похоже на другие ограничения: вы можете отключить ограничение NOT NULL, но столбец не будет считаться NOT NULL
, если вы повторно включите ограничение с помощью NOVALIDATE. Давайте создадим небольшой пример:
SQL> CREATE TABLE tt (ID NUMBER NOT NULL);
Table created
SQL> SELECT column_name, nullable FROM user_tab_columns WHERE table_name = 'TT';
COLUMN_NAME NULLABLE
------------------------------ --------
ID N
Теперь, если я отключу ограничение и снова включу его с помощью NOVALIDATE, столбец не будет считаться НЕ УСТРАНЕННЫМ Oracle:
SQL> SELECT constraint_name, search_condition
2 FROM user_constraints WHERE table_name = 'TT';
CONSTRAINT_NAME SEARCH_CONDITION
------------------------------ ----------------------------
SYS_C00786538 "ID" IS NOT NULL
SQL> ALTER TABLE tt MODIFY CONSTRAINT SYS_C00786538 DISABLE;
Table altered
SQL> ALTER TABLE tt MODIFY CONSTRAINT SYS_C00786538 ENABLE NOVALIDATE;
Table altered
SQL> SELECT column_name, nullable FROM user_tab_columns WHERE table_name = 'TT';
COLUMN_NAME NULLABLE
------------------------------ --------
ID Y
Итак, я бы сказал, что если у вас есть значения NULL в столбце NOT NULLABLE (согласно моему последнему запросу), у вас есть ошибка (обратитесь в службу поддержки?)