Étant donné qu’en DB2/400, il n’y ait pas de gestion de la clause “Auto Increment”, nous avons cherché le moyen de générer un identifiant unique lors de chacune des insertions. Deux moyens se présentent à nous : l’utilisation de séquences, dans le cas où la clé est composée d’un numéro avec des préfixes ou suffixes supplémentaires, ou bien mieux encore, la clause “Generated as identity” à utiliser lors de la création d’une table en SQL.
Utilisation des séquences
Nous en parlions il y a déjà un petit peu plus d’un an, plus précisément le 11 octobre 2011, dans un article exclusivement dédié à ce sujet. Voici le lien pour vous y rendre: comment gérer les séquences dans DB2/400.
Utilisation de l’auto-incrément
Pour garantir la génération d’une clé unique, le fait d’indiquer qu’elle est primaire ne suffit pas. On souhaite alors aller plus loin et on voudrait que l’identifiant soit un nombre automatiquement incrémenté à chaque ajout. Le champ ne doit alors plus être spécifié dans une requête de type “Insert”.
Voici un exemple de syntaxe que vous pouvez utiliser:
CREATE TABLE vlecomte/test (
idauto INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY
(START WITH 0, INCREMENT BY 1, NO CACHE ) PRIMARY KEY,
champ VARCHAR(20)
);
On utilise donc la clause “Generated always AS Identity” en spécifiant la valeur de départ, le pas de l’incrément, et le cache. Exemple : démarrer à la valeur 0, utiliser un incrément de 1 et pas de mise en cache pour les sessions. Remarquez aussi qu’on utilise la norme système pour le SQL : cela explique pourquoi on ne retrouve pas un “.” à la place du slash quand on spécifie le schéma dans lequel on crée notre table.
Modifier la colonne
Imaginons que vous supprimiez le contenu de cette table après avoir effectué un archivage. Vous souhaitez alors recommencer avec une valeur bien définie plutôt que de recommencer avec la suivante. Nous allons donc vous montrer un exemple de syntaxe pour modifier la colonne.
ALTER TABLE vlecomte/test
ALTER COLUMN idauto RESTART WITH 8;
On commence d’abord par le niveau le plus haut : la table. On spécifie ensuite qu’on veut modifier la colonne “idauto” (c’est son nom) en spécifiant la clause “Restart with” et la valeur 8. Lors du prochain ajout, la valeur de notre champ clé sera égale à 8.
Sur quelle version?
Ceci a été testé sur une version UDB V7R1MO du système iSeries. Consultez éventuellement la documentation officielle pour savoir si cela s’applique également à la vôtre. Cela doit aussi fonctionner pour une version 8+ sous l’OS Linux.