IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
logo
Sommaire > Les générateurs
        Qu'est ce qu'un générateur ?
        Comment créer un générateur ?
        Comment effacer un générateur ?
        Comment obtenir une nouvelle valeur d'un générateur ?
        Comment obtenir la valeur d'un générateur sans l'incrémenter

rechercher
precedent    sommaire    suivant    telechargermiroir


Qu'est ce qu'un générateur ?
auteur : Barbibulle
Un générateur est un numéroteur unique. Il va donc servir principalement à créer des identifiants uniques.

Pourquoi utiliser un générateur plutôt qu'une procédure ou une table de numéros ? Et bien il faut savoir que les opérations sur les générateurs ne font pas partie de la transaction en cours. Ce qui veut dire que si on incrémente dans une transaction T1 un générateur, cette action est immédiatement visible des autres transanctions en cours ou futures. De plus l'abandon de T1 (RollBack) ne va pas altérer le générateur, il restera avec sa valeur incrémentée. Vous me direz que le numéro n'a donc pas été utilisé. Et oui il peut donc y avoir des 'trous', mais le but premier est l'unicité, ce qui est bien réalisé ici.


Comment créer un générateur ?
auteur : Barbibulle
On peut créer autant de générateur qu'on en a besoin de la manière suivante :
CREATE GENERATOR GEN_MON_GENERATEUR;
Par défaut le générateur est initialisé à zéro mais il est possible de modifier cette initialisation :
SET GENERATOR GEN_MON_GENERATEUR TO 1000;
lien : faq Qu'est ce qu'un générateur ?

Comment effacer un générateur ?
auteur : Barbibulle
Pour supprimer un générateur exécutez le code ci-dessous (après vous être assuré qu'il n'est plus utilisé par les applications clientes ou par la base.
delete from RDB$GENERATORS where 
RDB$GENERATOR_NAME = 'GEN_MON_GENERATEUR';
Pour renommer un générateur il faut en fait le supprimer et le recréer avec le bon nom et éventuellement l'initialiser avec la bonne valeur (celle de celui supprimé).

lien : faq Qu'est ce qu'un générateur ?

Comment obtenir une nouvelle valeur d'un générateur ?
auteur : Barbibulle
Pour optenir un nouveau numéro unique il faut utiliser la fonction gen_id(NomDuGénérateur, ValeurIncrement).
gen_id(GEN_MON_GENERATEUR,1)
On remarquera qu'on n'est pas obligé d'incrémenter de un en un, la seule règle à adopter est de ne pas utiliser un coup un incrément positif puis un coup un négatif, car évidemment dans ce cas l'unicité n'est plus garantie...

Cette fonction est utilisabe dans les procédures stockées :
CREATE PROCEDURE SP_GEN_MON_GENERATEUR
RETURNS (ID INTEGER)
AS
BEGIN
  ID = GEN_ID(GEN_MON_GENERATEUR, 1);
  SUSPEND;
END     
Bien entendu dans les triggers :
CREATE TRIGGER MON_TRIGGER_BI FOR MA_TABLE
ACTIVE BEFORE INSERT POSITION 0
AS

BEGIN
  IF (NEW.MA_CLE_PRIMAIRE IS NULL) THEN
    NEW.MA_CLE_PRIMAIRE = GEN_ID(GEN_MON_GENERATEUR,1);
END     
mais également dans les ordres SQL :
INSERT INTO MA_TABLE (MA_CLE_PRIMAIRE, NOM, 
PRENOM) VALUES (GEN_ID(GEN_MON_GENERATEUR,1), 'Barbibulle', NULL);
        
ou bien encore :
SELECT GEN_ID(GEN_MON_GENERATEUR,1) FROM 
RDB$DATABASE;
Cette dernière méthode permet de récupérer la valeur incrémentée du générateur sans utiliser une procédure stockée.

lien : faq Qu'est ce qu'un générateur ?

Comment obtenir la valeur d'un générateur sans l'incrémenter
auteur : Barbibulle
Pour lire un générateur sans l'affecter il suffit de faire :
gen_id(GEN_MON_GENERATEUR,0)
lien : faq Qu'est ce qu'un générateur ?

rechercher
precedent    sommaire    suivant    telechargermiroir

Consultez les autres F.A.Q's


Valid XHTML 1.1!Valid CSS!

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2005 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.