Какво не е Null ограничение в oracle
Ограниченията Not Null в oracle се използват за налагане на стойности, които не са нулеви в колоната в таблицата. Така че, ако се опитате да вмъкнете null в тази колона, ще изведе грешка.
Как да създадете ограничение без нула
Ненулевите ограничения се дефинират при създаването на таблицата или можете да промените таблицата по-късно, за да промените колона на Not null. Нека да разгледаме примерите.
Създаване на таблица
Ограничението не null е посочено в колоната.
SQL> CREATE TABLE "EMP" ("EMPNO" NUMBER(4,0) Not Null, "ENAME" VARCHAR2(10) Not null, "JOB" VARCHAR2(9), "MGR" NUMBER(4,0), "HIREDATE" DATE, "SAL" NUMBER(7,2) , "COMM" NUMBER(7,2), "DEPTNO" NUMBER(2,0) ); Table created.
Тук сме дефинирали две ненулеви ограничения върху таблицата emp. Можем да проверим ограниченията Not null в таблицата с помощта на заявката по-долу
SQL> column CONSTRAINT_NAME format a20 SQL> column SEARCH_CONDITION format a50 SQL> SELECT Constraint_name, Search_condition FROM User_constraints WHERE Table_name = 'EMP' AND Constraint_type = 'C';
Ограниченията Not Null също се дефинират като ограничения за проверка и имат условия за търсене като име на колона, а не null
Добавяне на ограничение Not след създаване на таблица
Можем да модифицираме таблицата, за да добавим ограничението non null
SQL> alter table emp modify ("HIREDATE" not null); Table altered.
Ако имаме нулеви данни в съществуващата колона, тогава този израз ще се провали
SQL> SELECT Constraint_name, Search_condition FROM User_constraints WHERE Table_name = 'EMP' AND Constraint_type = 'C'
Можем също да дадем персонализирано име на ограничението Not Null. Ето пример, който да го демонстрира
SQL> CREATE TABLE "EMP" ("EMPNO" NUMBER(4,0) Constraint EMP_NOTNULL Not Null, "ENAME" VARCHAR2(10) Not null, "JOB" VARCHAR2(9), "MGR" NUMBER(4,0), "HIREDATE" DATE, "SAL" NUMBER(7,2) , "COMM" NUMBER(7,2), "DEPTNO" NUMBER(2,0) ); Table created. SQL> column CONSTRAINT_NAME format a20 SQL> column SEARCH_CONDITION format a50 SQL> SELECT Constraint_name, Search_condition FROM User_constraints WHERE Table_name = 'EMP' AND Constraint_type = 'C';
SQL> alter table emp modify ("HIREDATE" Constraint H_NOTNULL Not Null); Table altered. SQL> SELECT Constraint_name, Search_condition FROM User_constraints WHERE Table_name = 'EMP' AND Constraint_type = 'C';
Как да премахнете ограничението Not Null
Трябва да модифицираме колоната, за да приема нулеви стойности
SQL>alter table emp modify "HIREDATE" Null; Table altered. SQL> SELECT Constraint_name, Search_condition FROM User_constraints WHERE Table_name = 'EMP' AND Constraint_type = 'C';
Можем да премахнем ограничението not null с помощта на командата alter table drop constraint също
SQL> alter table emp drop constraint EMP_NOTNULL ; Table altered; SQL> SELECT Constraint_name, Search_condition FROM User_constraints WHERE Table_name = 'EMP' AND Constraint_type = 'C';
Как да добавите ненулево ограничение към колоната, съдържаща нулеви стойности
Ако се опитате да добавите ограничение non-null към колоната, съдържаща нулеви стойности, тогава тази команда ще се провали, тъй като ще потвърди всички редове, всички съществуващи редове за ненулево ограничение. Понякога искаме да запазим съществуващите нулеви стойности и да проверим за бъдещи редове, че съдържат стойност, която не е нула за тази колона, тогава в този случай можем да активираме ограничението с клауза novalidate. С тази клауза тя няма да проверява съществуващите редове, но бъдещите редове ще бъдат проверявани
alter table emp modify "HIREDATE" not Null novalidate;
Прочетете също
пуснете първичен ключ oracle
Външен ключ в oracle
ограничение на уникален ключ в Oracle
как да проверите всички ограничения на таблица в oracle
oracle променете таблицата, модифицирайте типа на колоната
https://docs.oracle.com/cd/B28359_01/server.111/b28310/general005.htm#ADMIN11554