Bonjour à tous,
Je sais créer avec un trigger et une séquence, un identifiant auto incrémental, mais est-il possible d'en créer un qui boucherait les id non-utilisés dans une tabel (par exemple après des delete) ?
Merci beaucoup !
Bonjour à tous,
Je sais créer avec un trigger et une séquence, un identifiant auto incrémental, mais est-il possible d'en créer un qui boucherait les id non-utilisés dans une tabel (par exemple après des delete) ?
Merci beaucoup !
Non, ça n'existe pas.
D'ailleurs, on peut lire :
Mais est-ce que ces trous sont un réel problème (par exemple la facturation) ?Une séquence sans trou ? Etant donné qu'une séquence peut être interrogée à tout moment par tout utilisateur Oracle ayant les droits suffisants, IL NE FAUT PAS considérer les séquences comme un moyen de générer une suite de nombres sans "trous". Exemple : dans le cas de l'alimentation d'une clé primaire, si un enregistrement a été inséré, puis si la transaction a subi un "rollback", alors la séquence ne revient pas en arrière, et lors de l'insertion suivante, on aura l'impression que la séquence a sauté un ou plusieurs nombres. Donc : une séquence fournit un moyen d'obtenir des valeurs uniques, mais pas forcément continues.
Si c'est le cas, vous allez devoir écrire une procédure manuelle....
Je pense que ceci devrait convenir :
il faut créer une IOT avec la liste des numéros, ensuite il suffit de faire un trigger qui va donner le 1° numéro trouvé et le supprimer de la table.
merci de vos réponses
qu'est ce qu'une IOT ?
edit : ce n'est pas réellement quelque chose que je souhaite utiliser, c'est plus un exercice de style.
On en parle souvent dans le forum, par exemple ici : http://www.developpez.net/forums/showthread.php?t=22377
Une séquence est tout à fait adaptée pour une clé primaire, mais pas forcément pour une clé fonctionnelle.
Si le besoin des numéros consécutifs est réel et incontournable (ce qui est rare), il faut gérer manuellement un compteur stocké en table.
Ce besoin implique aussi qu'aucun enregistrement ne doit être supprimé, mais simplement marqué comme inactif, ou tout autre statut qui convient.
merci pour les liens, j'ai appris pleins de choses.![]()
Partager