Co není omezení Null v oracle
Omezení Not Null v oracle se používají k vynucení hodnot, které nejsou null ve sloupci v tabulce. Pokud se tedy pokusíte do tohoto sloupce vložit hodnotu null, vyvolá to chybu.
Jak vytvořit nenulové omezení
Omezení typu Not null jsou definována při vytváření tabulky nebo můžete tabulku později upravit tak, aby byl sloupec změněn na hodnotu Not null. Podívejme se na příklady.
Vytvoření tabulky
Omezení není null je zadáno přímo ve sloupci.
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.
Zde jsme definovali dvě nenulová omezení na tabulce emp. Omezení Not null v tabulce můžeme zkontrolovat pomocí níže uvedeného dotazu
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';
Omezení Not Null jsou také definována jako kontrolní omezení a mají podmínky vyhledávání jako název sloupce ne null
Přidání bez omezení po vytvoření tabulky
Můžeme upravit tabulku tak, aby přidala podmínku not null
SQL> alter table emp modify ("HIREDATE" not null); Table altered.
Pokud ve sloupci existují nulová data, tento příkaz selže
SQL> SELECT Constraint_name, Search_condition FROM User_constraints WHERE Table_name = 'EMP' AND Constraint_type = 'C'
Můžeme také dát vlastní název omezení Not Null. Zde je příklad, který to demonstruje
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';
Jak zrušit omezení Not Null
Musíme upravit sloupec tak, aby přijímal hodnoty 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';
Omezení not null můžeme zrušit také pomocí příkazu 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';
Jak přidat nenulové omezení do sloupce obsahujícího hodnoty null
Pokud se pokusíte přidat podmínku nenulovou hodnotu do sloupce obsahujícího hodnoty null, pak tento příkaz selže, protože ověří všechny řádky a všechny existující řádky na podmínku není null. Někdy chceme zachovat stávající hodnoty null a zkontrolovat pro budoucí řádky, že pro tento sloupec obsahují nenulovou hodnotu, pak v takovém případě můžeme povolit omezení pomocí klauzule novalidate. Pomocí této klauzule nebude kontrolovat existující řádky, ale budoucí řádky budou zkontrolovány
alter table emp modify "HIREDATE" not Null novalidate;
Přečtěte si také
zrušte primární klíč oracle
Cizí klíč v oracle
Omezení jedinečného klíče v Oracle
jak zkontrolovat všechna omezení v tabulce v oracle
oracle alter table upravit typ sloupce
https://docs.oracle.com/cd/B28359_01/server.111/b28310/general005.htm#ADMIN11554