Wat is geen nulbeperking in orakel
Niet-null-beperkingen in orakel worden gebruikt om niet-null-waarden af te dwingen in de kolom in de tabel. Dus als je null in die kolom probeert in te voegen, zal het een foutmelding geven.
Hoe een niet-null-beperking te maken
Er worden geen null-beperkingen gedefinieerd bij het maken van de tabel of u kunt de tabel later wijzigen om een kolom te wijzigen in Niet null. Laten we de voorbeelden eens bekijken.
Tafel maken
Er is geen null-beperking gespecificeerd in lijn met de kolom.
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.
Hier hebben we twee niet-null-beperkingen gedefinieerd voor de tabel emp. We kunnen de Niet null-beperkingen in de tabel controleren met de onderstaande query
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';
Niet Null-beperkingen worden ook gedefinieerd als controlebeperkingen en hebben zoekvoorwaarden als kolomnaam niet null
Niet-beperking toevoegen na het maken van een tabel
We kunnen de tabel aanpassen om de niet-null-beperking toe te voegen
SQL> alter table emp modify ("HIREDATE" not null); Table altered.
Als we null-gegevens in de bestaande kolom hebben, zal deze verklaring niet werken
SQL> SELECT Constraint_name, Search_condition FROM User_constraints WHERE Table_name = 'EMP' AND Constraint_type = 'C'
We kunnen de aangepaste naam ook aan de beperking Niet null geven. Hier is het voorbeeld om het te demonstreren
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';
De niet-null-beperking verwijderen
We moeten de kolom aanpassen om null-waarden te accepteren
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';
We kunnen de niet-null-beperking ook laten vallen met het commando 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';
Hoe een niet-null-beperking toe te voegen aan de kolom met null-waarden
Als u een niet-null-beperking probeert toe te voegen aan de kolom die null-waarden bevat, mislukt die opdracht omdat alle rijen en alle bestaande rijen worden gevalideerd voor niet-null-beperkingen. Soms willen we de bestaande null-waarden behouden en voor toekomstige rijen controleren of ze een niet-null-waarde voor deze kolom bevatten. In dat geval kunnen we de beperking met de clausule novalidate inschakelen. Met deze clausule worden de bestaande rijen niet gecontroleerd, maar toekomstige rijen worden gecontroleerd
alter table emp modify "HIREDATE" not Null novalidate;
Lees ook
drop primaire sleutel oracle
Buitenlandse sleutel in oracle
Unieke sleutelbeperking in Oracle
hoe alle beperkingen op een tabel in oracle te controleren
oracle verander tabel wijzig kolomtype
https://docs.oracle.com/cd/B28359_01/server.111/b28310/general005.htm#ADMIN11554