sql >> Database >  >> RDS >> Oracle

Hoe een niet-null-beperking in Oracle te maken

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


  1. ScaleGrid gerangschikt in top 100 cloudserviceproviders

  2. Waarom kunnen PL/pgSQL-functies een neveneffect hebben, terwijl SQL-functies dat niet kunnen?

  3. Hoe kan ik dubbele rijen in een tabel verwijderen?

  4. MySQL en NoSQL:help me de juiste te kiezen