Hvad er Not Null-begrænsning i Oracle
Not Null-begrænsninger i oracle bruges til at håndhæve ikke-null-værdier i kolonnen i tabellen. Så hvis du forsøger at indsætte null i den kolonne, vil det give en fejl.
Sådan opretter man ikke null-begrænsning
Ikke null-begrænsninger er defineret ved tabeloprettelse, eller du kan ændre tabellen senere for at få en kolonne ændret til Ikke null. Lad os tage et kig på eksemplerne.
Tabeloprettelse
Ikke null-begrænsning er angivet inline med kolonnen.
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. Her har vi defineret to ikke null-begrænsninger på tabellen emp. Vi kan kontrollere Ikke null-begrænsningerne i tabellen ved at bruge nedenstående forespørgsel
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-begrænsninger er også defineret som check-begrænsninger og har søgebetingelser som kolonnenavn ikke null
Tilføjelse af ikke-begrænsning efter tabeloprettelse
Vi kan ændre tabellen for at tilføje ikke null-begrænsningen
SQL> alter table emp modify ("HIREDATE" not null);
Table altered. Hvis vi har nul-data i kolonnen, vil denne erklæring mislykkes
SQL> SELECT Constraint_name, Search_condition
FROM User_constraints
WHERE Table_name = 'EMP' AND
Constraint_type = 'C'
Vi kan også give det brugerdefinerede navn til Not Null-begrænsningen. Her er eksemplet for at demonstrere det
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';
Sådan dropper du Not Null-begrænsningen
Vi er nødt til at ændre kolonnen for at acceptere null-værdier
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';
Vi kan også slette ikke null-begrænsningen ved at bruge kommandoen 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';
Sådan tilføjes ikke null-begrænsning på kolonnen, der indeholder null-værdier
Hvis du forsøger at tilføje en ikke-null-begrænsning på kolonnen, der indeholder null-værdier, vil den kommando mislykkes, da den vil validere alle rækkerne, alle de eksisterende rækker, for ikke-null-begrænsninger. Nogle gange ønsker vi at beholde de eksisterende null-værdier og kontrollere for fremtidige rækker, at de indeholder en ikke-null-værdi for denne kolonne, så i så fald kan vi aktivere begrænsningen med novalidate-sætning. Med denne klausul vil den ikke kontrollere de eksisterende rækker, men fremtidige rækker vil blive kontrolleret
alter table emp modify "HIREDATE" not Null novalidate;
Læs også
slip primærnøgle oracle
Udenlandsk nøgle i oracle
Unik nøglebegrænsning i Oracle
hvordan man kontrollerer alle begrænsninger på en tabel i oracle
oracle ændre tabel modificere kolonnetype
https://docs.oracle.com/cd/B28359_01/server.111/b28310/general005.htm#ADMIN11554