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.
CREATA TABLE table_name ( ... column_name datatype DEFAULT [ ON NULL ] expr | seq_name.NEXTVAL ... );
-- -- 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