Oracle
 sql >> Base de données >  >> RDS >> Oracle

Comment créer une contrainte non nulle dans Oracle

Qu'est-ce que la contrainte Not Null dans Oracle

Les contraintes non nulles dans oracle sont utilisées pour appliquer des valeurs non nulles dans la colonne de la table. Donc, si vous essayez d'insérer null dans cette colonne, cela générera une erreur.

Comment créer une contrainte non nulle

Les contraintes non nulles sont définies lors de la création de la table ou vous pouvez modifier la table ultérieurement pour qu'une colonne soit modifiée en non nulle. Examinons les exemples.

Création de tableaux
La contrainte non nulle est spécifiée en ligne avec la colonne.

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. 

Ici nous avons défini deux contraintes non nulles sur la table emp. Nous pouvons vérifier les contraintes non nulles sur la table à l'aide de la requête ci-dessous

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';

Les contraintes Not Null sont également définies comme des contraintes de vérification et ont des conditions de recherche comme nom de colonne non null

Ajout de la contrainte Not après la création de la table

On peut modifier le tableau pour ajouter la contrainte non nulle

SQL> alter table emp modify ("HIREDATE" not null);
 Table altered.

Si nous avons des données nulles dans la colonne existante, cette instruction échouera

SQL> SELECT Constraint_name, Search_condition
     FROM User_constraints
     WHERE Table_name = 'EMP'  AND
     Constraint_type = 'C'

Nous pouvons également donner le nom personnalisé à la contrainte Not Null. Voici l'exemple pour le démontrer

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';

Comment supprimer la contrainte Not Null

Nous devons modifier la colonne pour accepter les valeurs nulles

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';

Nous pouvons également supprimer la contrainte non nulle à l'aide de la commande 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';

Comment ajouter une contrainte non nulle sur la colonne contenant des valeurs nulles

Si vous essayez d'ajouter une contrainte non nulle sur la colonne contenant des valeurs nulles, cette commande échouera car elle validera toutes les lignes toutes les lignes existantes pour la contrainte non nulle. Parfois, nous voulons conserver les valeurs nulles existantes et vérifier pour les lignes futures qu'elles contiennent une valeur non nulle pour cette colonne, puis, dans ce cas, nous pouvons activer la contrainte avec la clause novalidate. Avec cette clause, il ne vérifiera pas les lignes existantes, mais les lignes futures seront vérifiées

alter table emp modify "HIREDATE" not Null novalidate;

Lire aussi
supprimer la clé primaire oracle
Clé étrangère dans oracle
Contrainte de clé unique dans Oracle
comment vérifier toutes les contraintes sur une table dans oracle
oracle modifier la table modifier le type de colonne
https://docs.oracle.com/cd/B28359_01/server.111/b28310/general005.htm#ADMIN11554