> Tech > Générer une identité

Générer une identité

Tech - Par iTPro - Publié le 24 juin 2010
email

Quand vous insérez une ligne dans une colonne d'identité définie avec l'option par défaut GENERATED ALWAYS, aucune valeur n'est spécifiée pour la colonne d'identité. La valeur de colonne d'identité peut être omise de l'une des deux manières décrites cidessous :

INSERT INTO employee(name, dept#
VALUES('larry Bird', 'BC33')
ou
INSERT INTO

Générer une identité

employee
VALUES(DEFAULT,’Larry Bird’, ‘BC33’)

Si la ligne Larry Bird est la première
ligne ajoutée à  la table employee, n’importe
quelle instruction INSERT génèrera
une valeur empid de 1 pour Larry
Bird.

Si on essaie de spécifier une valeur
pour une colonne d’identité créée
avec l’option GENERATED ALWAYS,
une erreur (SQLSTATE 428C9) est renvoyée.
Seule exception à  cette règle : si
la clause OVERRIDING SYSTEM VALUE
a été spécifiée sur une instruction
INSERT (ou UPDATE). Si l’INSERT
contient une clause OVERRIDING SYSTEM
VALUE, les nouvelles valeurs spécifiées
pour une colonne d’identité
(plutôt que les valeurs générées par
DB2 UDB) sont utilisées.
Voici un exemple d’utilisation de
cette clause OVERRIDING pour spécifier
une valeur ID employé générée par
l’utilisateur pour Larry Bird :


INSERT INTO employee VALUES
(33,’Larry Bird’, ‘BC33’)
OVERRIDING SYSTEM VALUE



Cet exemple montre comment
l’option OVERRIDING SYSTEM VALUE
peut aussi introduire des trous dans la
suite de valeurs pour une colonne
d’identité.

OVERRIDING USER VALUE est une
autre option de remplacement que
l’on peut spécifier sur des instructions
INSERT (et UPDATE). Avec OVERRIDING
USER VALUE, DB2 UDB génère
toujours la valeur pour une colonne
d’identité et ignore les éventuelles
valeurs fournies par l’utilisateur pour
une instruction INSERT ou UPDATE.

Il n’y a pas d’option override pour
des interfaces non-SQL. Comme mentionné
précédemment, DB2 UDB génèrera
toujours la valeur de colonne
d’identité quand des lignes seront
ajoutées ou modifiées via une interface
non-SQL.

Le compteur de la colonne d’identité
est incrémenté ou décrémenté indépendamment
d’un job ou d’une
connexion. Si un job donné insère
deux lignes qui incrémentent un
compteur d’identité deux fois, ce job
peut subir un trou entre les deux
nombres qui sont générés, parce que
d’autres jobs peuvent être en train
d’incrémenter simultanément le
même compteur d’identité.

Une colonne d’identité peut aussi
sembler présenter des trous dans la
suite de valeurs, par suite d’une instruction
INSERT qui a été annulée dans
le cadre de la transaction de base de
données. Dès lors qu’une valeur de colonne
d’identité a été attribuée, elle ne
sera pas réutilisée même si l’instruction
INSERT associée a été annulée. Par
exemple, si le INSERT du premier employé
dans une table employee est annulé,
le prochain employé inséré dans
la table recevra un ID employé de 2,
pas 1. Les valeurs de colonne d’identité
qui ont été supprimées ne sont pas
non plus réutilisées.

Téléchargez gratuitement cette ressource

IBMi et Cloud : Table ronde Digitale

IBMi et Cloud : Table ronde Digitale

Comment faire évoluer son patrimoine IBMi en le rendant Cloud compatible ? Comment capitaliser sur des bases saines pour un avenir serein ? Faites le point et partagez l'expertise Hardis Group et IBM aux côtés de Florence Devambez, DSI d'Albingia.

Tech - Par iTPro - Publié le 24 juin 2010