Datalbi  
Créé le 17/10/2015 par Laurent Bourcier

Oracle 12c Nouvelles Fonctionnalités : "DEFAULT ON NULL" et "DEFAULT avec sequence"

Introduction

Jusqu'à la version 11gR2, la clause "DEFAULT" dans la définition d'une colonne ne prenait pas les séquences et s'appliquait uniquement lorsqu'on ne précisait pas de valeur.

La version 12c introduit deux nouveautés :

En version 12c, une colonne peut avoir une valeur par défaut qui est une séquence.

En version 12c, une valeur insérée à NULL peut voir sa valeur changée grace à la nouvelle clause "DEFAULT ON NULL". Cette clause comprend le fonctionnement par défaut (valeur attribuée si colonne omise) et traite en plus les valeurs insérées à NULL.

Mise en oeuvre

Syntaxe :.
CREATA TABLE table_name (
...
column_name datatype DEFAULT [ ON NULL ] expr | seq_name.NEXTVAL
...
);

Exemples

--
-- Creation de la table
--
CREATE SEQUENCE SEQ_TEST;

CREATE TABLE TEST (
ID          NUMBER,
COL1        VARCHAR2(30),
COL2        VARCHAR2(30) DEFAULT 'DEF',
COL3        VARCHAR2(30) DEFAULT ON NULL 'DEF_ON_NULL',
COL4        NUMBER DEFAULT SEQ_TEST.NEXTVAL
);

desc TEST

Nom  NULL     Type         
---- -------- ------------ 
ID            NUMBER       
COL1          VARCHAR2(30) 
COL2          VARCHAR2(30) 
COL3 NOT NULL VARCHAR2(30) 
COL4          NUMBER

-- On note au passage la création implicite d'une contrainte NOT NULL 
-- (plus précisément CHECK "COL3" IS NOT NULL) lorsque l'on utilise "DEFAULT ON NULL".

--
-- Insertion des données
--

INSERT INTO TEST (ID) VALUES (1);

1 lignes inséré.

INSERT INTO TEST (ID, COL1, COL2, COL3, COL4) VALUES (2, 'VAL', 'VAL', 'VAL', 99);

1 lignes inséré.

INSERT INTO TEST (ID, COL1, COL2, COL3, COL4) VALUES (3, NULL, NULL, NULL, NULL);

1 lignes inséré.

--
-- Vérification
--

SELECT * FROM TEST ORDER BY ID;

        ID COL1                 COL2                 COL3                 COL4
---------- -------------------- -------------------- -------------------- ----------
         1                      DEF                  DEF_ON_NULL                   1 
         2 VAL                  VAL                  VAL                          99 
         3                                           DEF_ON_NULL                     
         
-- On constate bien que :
-- La colonne DEFAULT ON NULL insere bien DEF_ON_NULL lorsque la colonne est omise
-- La colonne DEFAULT ON NULL insere bien DEF_ON_NULL lorsque l'on insere NULL explicitement