Les Crash-Devs d'un Passionné

Générer un auto incrément sur Oracle

/Catégorie/basededonnees

Temps de lecture : 2 minutes

Cela peut paraitre complètement fou mais dans les versions inférieures à ORACLE 12c (sortie en 2013) cette base de donnée ne possède pas d'auto incrément !

Donc en 12c c'est assez simple

CREATE TABLE t1 (c1 NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY, c2 VARCHAR2(10));

Par contre dans les versions inférieures à 12c il faudra le faire à la main :

  • Générer une simple table avec une colonne faisait office d'auto incrément, ici ID
    CREATE TABLE MYTABLE ( ID NUMBER(10) NOT NULL, NAME VARCHAR2(10) NOT NULL);
  • Ajouter une clé primaire (Primary Key) sur la colonne ID
    ALTER TABLE MYTABLE ADD ( CONSTRAINT NAME_PK PRIMARY KEY (ID) );
  • Créer une séquence
    CREATE SEQUENCE NAME_SEQ ;

Une séquence permet d'avoir une suite de nombre entier. On crée un nom de séquence et on la manipule avec des pseudo colonnes comme CURRVAL ou NEXTVAL.

  • Configurer le déclencheur (Trigger)
clipboard
Copier le code
1
2
3
4
5
6
7
CREATE OR REPLACE 
  TRIGGER TRIGGER_TABLE 
  BEFORE INSERT ON MYTABLE 
  FOR EACH ROW BEGIN 
    IF :new.ID IS NULL THEN :new.ID := NAME_SEQ.NEXTVAL; 
    END IF; 
  END;

Un trigger permet d'exécuter le code que nous venons de déclarer

FOR EACH ROW BEGIN IF :new.ID IS NULL THEN :new.ID := NAME_SEQ.NEXTVAL; END IF; END;

lorsque qu'un évènement se produit

TRIGGER TRIGGER_TABLE BEFORE INSERT ON MYTABLE

Et hop le tour est joué, pas besoin de préciser l'ID

INSERT INTO MYTABLE('Test')

>+ -----------+

| ID NAME |

|------------|

| 1 Test |

+ -----------+