Oracle 12c : Colonnes en auto-incrément

Mes chers amis DBA, le temps est venu pour nous de nous réconcilier avec nos amis développeurs !
Combien de fois avons-nous eu des mails ou des appels de développeurs nous indiquant qu’il y avait un problème avec l’auto-incrémentation d’une table qui ne fonctionnait pas ?
Combien de tragédies grecques autour du bien-fondé des séquences ?
Et bien grâce à la 12c, plus de problèmes, tout le monde sera heureux !
Séquences ou colonnes IDENTITY, tout est possible !
Comment l’implémenter ?
Et bien de la façon la plus « simple » du monde :

GENERATED
[ ALWAYS | BY DEFAULT [ ON NULL ] ]
AS IDENTITY [ ( identity_options ) ]

Mais qu’est-ce que c’est que tout ça ?
Tout simplement, l’implémentation de l’auto-incrément par Oracle.
Mettons-nous en situation, créons une table, une colonne ID, sa séquence et insérons-y des lignes :

CREATE TABLE test_pgr
(ID NUMBER(4));
CREATE SEQUENCE test_pgr_seq;
BEGIN
                FOR i IN 1..2000 LOOP
                               INSERT INTO test_pgr VALUES (test_pgr_seq.nextval);
                END LOOP;
                commit;
END;
/

Nous voici donc avec une table remplie de nos différentes valeurs, générées par une séquence… tellement Oracle 11g R2 tout ça…
Faisons pareil en Oracle 12c :

CREATE TABLE test_pgr_identity
(id NUMBER GENERATED BY DEFAULT AS IDENTITY,
 chaine VARCHAR2(30));
BEGIN
                FOR i IN 1..2000 LOOP
                               INSERT INTO test_pgr_identity (description) VALUES ('Ligne : ' || i);
                END LOOP;
                commit;
END;
/
DROP TABLE test_pgr_identity PURGE;
DROP TABLE test_pgr PURGE;

L’utilisation est extrêmement simple et devra convenir à tous.
En revanche, si l’on regarde sous le capot, on s’aperçoit qu’en réalité, le moteur Oracle ne fait que créer une séquence sous-jacente et l’appel via trigger lors d’une insertion.
Mais, comment peut-on générer des tests d’insertion en masse ?
Je vous propose justement de regarder Gatling ! Non, ce n’est pas une arme… quoi que…
Cet outil, opensource,  va nous permettre de créer des appels à des WebServices de façon très simple.
Etant donné le rapprochement que j’ai pu effectuer avec mes amis développeurs grâce aux colonnes en auto-incrément, je vous proposerai sous peu un article vous permettant de faire des tirs de performances sur une base de données Oracle à travers un WebService Java.
Le script SCALA, utilisé par Gatling, nous permettra de faire des appels rapides et efficaces.
A très bientôt !