Cos'è il vincolo non nullo in Oracle
I vincoli Not Null in Oracle vengono utilizzati per imporre valori non null nella colonna della tabella. Quindi, se provi a inserire null in quella colonna, verrà generato un errore.
Come creare un vincolo non nullo
I vincoli Non null vengono definiti al momento della creazione della tabella oppure è possibile modificare la tabella, in seguito, per modificare una colonna in Non null. Diamo un'occhiata agli esempi.
Creazione tabella
Viene specificato un vincolo non null in linea con la colonna.
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.
Qui abbiamo definito due vincoli non nulli sulla tabella emp. Possiamo controllare i vincoli Not null sulla tabella usando la query seguente
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';
I vincoli Not Null sono anche definiti come vincoli di controllo e hanno condizioni di ricerca come nome della colonna non null
Aggiunta Nessun vincolo dopo la creazione della tabella
Possiamo modificare la tabella per aggiungere il vincolo non nullo
SQL> alter table emp modify ("HIREDATE" not null); Table altered.
Se nella colonna sono presenti dati nulli, questa istruzione avrà esito negativo
SQL> SELECT Constraint_name, Search_condition FROM User_constraints WHERE Table_name = 'EMP' AND Constraint_type = 'C'
Possiamo anche assegnare il nome personalizzato al vincolo Not Null. Ecco l'esempio per dimostrarlo
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';
Come eliminare il vincolo Not Null
Dobbiamo modificare la colonna per accettare valori 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';
Possiamo anche eliminare il vincolo non nullo usando il comando alter table drop vincolo
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';
Come aggiungere un vincolo non nullo sulla colonna contenente valori nulli
Se si tenta di aggiungere un vincolo non nullo sulla colonna contenente valori null, quel comando non riuscirà poiché convaliderà tutte le righe tutte le righe esistenti per il vincolo non nullo. A volte vogliamo mantenere i valori nulli esistenti e verificare che le righe future contengano un valore non nullo per questa colonna, quindi, in tal caso, possiamo abilitare il vincolo con la clausola novalidate. Con questa clausola non verranno controllate le righe esistenti, ma verranno controllate le righe future
alter table emp modify "HIREDATE" not Null novalidate;
Leggi anche
rilascia chiave primaria oracle
Chiave esterna in Oracle
vincolo chiave univoca in Oracle
come controllare tutti i vincoli su una tabella in Oracle
oracle altera tabella modifica tipo di colonna
https://docs.oracle.com/cd/B28359_01/server.111/b28310/general005.htm#ADMIN11554