Base de données -Générer un auto incrément sur Oracle
13 juin 2016
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 !
http://docs.oracle.com/database/121/DRDAA/migr_tools_feat.htm#DRDAA109
Donc en 12c c'est assez simple
Par contre dans les versions inférieures à 12c il faudra le faire à la main :
Et hop le tour est joué, pas besoin de préciser l'ID
blog comments powered by Disqus
http://docs.oracle.com/database/121/DRDAA/migr_tools_feat.htm#DRDAA109
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
https://docs.oracle.com/cd/B14117_01/server.101/b10759/statements_6014.htmCREATE 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)
https://docs.oracle.com/database/121/LNPLS/create_trigger.htm#LNPLS01374CREATE 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
lorsque qu'un évènement se produitFOR EACH ROW BEGIN IF :new.ID IS NULL THEN :new.ID := NAME_SEQ.NEXTVAL; END IF; END;
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 |
+ -----------+