FAQ Interbase/FirebirdConsultez toutes les FAQ
Nombre d'auteurs : 3, nombre de questions : 56, dernière mise à jour : 8 octobre 2006 Ajouter une question
Cette faq a été réalisée à partir des questions fréquement posées sur les forums InterBase et Firebird de et de l'expérience personnelle des auteurs.
Nous tenons à souligner que cette F.A.Q. ne garantit en aucun cas que les informations qu'elle propose soient correctes. Les auteurs font le maximum, mais l'erreur est humaine. Cette F.A.Q. ne prétend pas non plus être complète. Si vous trouvez une erreur, ou que vous souhaitez devenir rédacteur, lisez ceci
Sur ce, nous vous souhaitons une bonne lecture.
L'équipe Firebird-Interbase de Developpez.com
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.
On peut créer autant de générateur qu'on en a besoin de la manière suivante :
Code SQL : | Sélectionner tout |
CREATE GENERATOR GEN_MON_GENERATEUR;
Code SQL : | Sélectionner tout |
SET GENERATOR GEN_MON_GENERATEUR TO 1000;
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.
Code SQL : | Sélectionner tout |
1 2 | delete from RDB$GENERATORS where RDB$GENERATOR_NAME = 'GEN_MON_GENERATEUR'; |
Pour optenir un nouveau numéro unique il faut utiliser la fonction gen_id(NomDuGénérateur, ValeurIncrement).
Code SQL : | Sélectionner tout |
gen_id(GEN_MON_GENERATEUR,1)
Cette fonction est utilisabe dans les procédures stockées :
Code SQL : | Sélectionner tout |
1 2 3 4 5 6 7 | CREATE PROCEDURE SP_GEN_MON_GENERATEUR RETURNS (ID INTEGER) AS BEGIN ID = GEN_ID(GEN_MON_GENERATEUR, 1); SUSPEND; END |
Code SQL : | Sélectionner tout |
1 2 3 4 5 6 7 8 | 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 |
Code SQL : | Sélectionner tout |
1 2 | INSERT INTO MA_TABLE (MA_CLE_PRIMAIRE, NOM, PRENOM) VALUES (GEN_ID(GEN_MON_GENERATEUR,1), 'Barbibulle', NULL); |
Code SQL : | Sélectionner tout |
1 2 | SELECT GEN_ID(GEN_MON_GENERATEUR,1) FROM RDB$DATABASE; |
Pour lire un générateur sans l'affecter il suffit de faire :
Code SQL : | Sélectionner tout |
gen_id(GEN_MON_GENERATEUR,0)
Proposer une nouvelle réponse sur la FAQ
Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour çaLes 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 © 2024 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et 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.