FirebirdSQL logo
 FILTEREXCEPTION 

Une séquence ou un générateur est un objet de base de données conçu pour produire une valeur numérique unique. Le terme séquence est conforme à SQL. Auparavant, dans Interbase et Firebird, les séquences étaient appelées générateurs.

Quel que soit le dialecte de la base de données, les séquences (ou générateurs) sont toujours stockées sous forme de valeurs entières de 64 bits.

Caution

Si le client utilise le dialecte 1, le serveur transmet les valeurs de séquence tronquées à une valeur de 32 bits. Si la valeur de séquence est transmise à un champ ou à une variable de 32 bits, tant que la valeur de séquence actuelle n’a pas dépassé les limites pour un nombre de 32 bits, aucune erreur ne se produira. Lorsque la valeur de séquence dépasse cette plage, la base de données du dialecte 3 signalera une erreur, et la base de données du dialecte 1 tronquera silencieusement les valeurs, ce qui peut également entraîner une erreur — par exemple si le champ alimenté par le gène

Cette section décrit comment créer, modifier (définir une valeur de séquence) et supprimer des séquences.

CREATE SEQUENCE

affectation

Création d’une nouvelle séquence (générateur).

Disponible en

DSQL, ESQL

Syntaxe
CREATE {SEQUENCE | GENERATOR} seq_name
[START WITH start_value] [INCREMENT [BY] increment]
Table 1. Paramètres de l’opérateur CREATE SEQUENCE
Paramètre Description

seq_name

Le nom de la séquence (générateur). Peut contenir jusqu’à 63 caractères.

start_value

Valeur initiale de la séquence (générateur). La valeur par défaut est 1.

increment

Incrément d’étape. 4 octets entiers. La valeur par défaut est 1.

L’instruction CREATE SEQUENCE crée une nouvelle séquence. Les mots SEQUENCE et GENERATOR sont synonymes. Vous pouvez utiliser les deux, mais il est recommandé d’utiliser SEQUENCE.

Au moment de la création de la séquence, celle-ci est définie par la valeur spécifiée dans la phrase facultative Débuter avec moins la valeur d’incrémentation spécifiée dans la phrase Incrémenter [par]. S’il n’y a pas de clause STARTING WITH, la séquence est fixée à 1. Ainsi, si la valeur de départ de la séquence est 100 et que l’incrément est de 10, la première valeur donnée par l’instruction NEXT VALUE FOR sera 100.

Note

Avant Firebird 4.0, la première valeur donnée par l’instruction NEXT VALUE FOR était 110.

La phrase optionnelle INCREMENT [BY] vous permet de définir le pas d’incrémentation pour l’opérateur NEXT VALUES FOR. Le pas d’incrémentation par défaut est de un. L’incrémentation ne peut pas être mise à zéro pour les séquences personnalisées. La valeur de la séquence est également modifiée en appelant la fonction GEN_ID, où le nom de la séquence et la valeur d’incrémentation, qui peut être différente de celle spécifiée dans la phrase INCREMENT BY, sont donnés comme paramètres.

Qui peut créer une séquence ?

L’instruction CREATE SEQUENCE (CREATE GENERATOR) peut être exécutée :

  • Administrateurs.

  • Utilisateurs avec le privilège CREATE SEQUENCE (CREATE GENERATOR).

L’utilisateur qui a créé la séquence devient le propriétaire de la séquence.

Exemples

Example 1. Création d’une séquence

Crée une séquence EMP_NO_GEN avec une valeur initiale de 0 et des incréments égaux à un.

CREATE SEQUENCE EMP_NO_GEN;
Example 2. Création d’une séquence

Crée une séquence EMP_NO_GEN avec une valeur initiale de 5 et des incréments égaux à un.

CREATE SEQUENCE EMP_NO_GEN START WITH 5;
Example 3. Création d’une séquence

Créez une séquence EMP_NO_GEN avec une valeur initiale de 1 et des incréments de 10.

CREATE SEQUENCE EMP_NO_GEN INCREMENT BY 10;
Example 4. Création d’une séquence

Créez une séquence EMP_NO_GEN avec une valeur de départ de 5 et des incréments de 10.

CREATE SEQUENCE EMP_NO_GEN START WITH 5 INCREMENT BY 10;

ALTER SEQUENCE

affectation

Modification de la séquence (générateur).

Disponible en

DSQL, ESQL

Syntaxe
ALTER {SEQUENCE | GENERATOR} seq_name
[RESTART [WITH newvalue]]
[INCREMENT [BY] increment]
Table 1. Paramètres de l’opérateur ALTER SEQUENCE
Paramètre Description

seq_name

Le nom de la séquence (générateur).

newvalue

Nouvelle valeur de la séquence (oscillateur). Nombre entier de 64 bits dans la plage -263 à 263 - 1

increment

Augmentation de l’étape. Ne peut pas être égal à "0".

L’opérateur ALTER SEQUENCE fixe la valeur de la séquence ou du générateur à une valeur spécifiée et/ou change la valeur de l’incrément.

La phrase RESTART WITH' vous permet de définir une valeur de séquence. La phrase `RESTART peut être utilisée indépendamment (sans WITH) pour redémarrer la valeur de la séquence à partir de la valeur où la génération de la valeur a commencé ou le redémarrage précédent a été lancé.

Warning

Une utilisation imprudente de l’opérateur ALTER SEQUENCE (changement de la valeur d’une séquence ou d’un générateur) peut entraîner une violation de l’intégrité logique des données.

La phrase "INCREMENT [BY]" vous permet de modifier le pas de séquence incrémentielle pour l’opérateur "NEXT VALUES FOR".

Note

La modification de la valeur de l’incrément est une fonctionnalité qui prend effet pour chaque requête exécutée après la validation du changement. Les procédures qui sont appelées pour la première fois après une modification de l’incrément utiliseront la nouvelle valeur si elles contiennent des instructions `NEXT VALUE FOR'. Les procédures qui sont déjà en cours d’exécution ne seront pas affectées car elles sont mises en cache. Les procédures qui utilisent `NEXT VALUE FOR' ne doivent pas être recompilées pour voir le nouvel incrément, mais si elles sont déjà en cours d’exécution ou chargées, il n’y a aucun effet.

Qui peut modifier la séquence ?

L’instruction ALTER SEQUENCE (ALTER GENERATOR) peut être exécutée :

  • administrators.

  • Le propriétaire de la séquence (générateur) ;

  • Utilisateurs ayant le privilège de `ALTER ANY SEQUENCE' (`ALTER ANY GENERATOR').

Exemples

Example 1. Modification de la séquence

Définissez la séquence EMP_NO_GEN à 145.

ALTER SEQUENCE EMP_NO_GEN RESTART WITH 145;
Example 2. Modification de la séquence

Réinitialise la valeur de la séquence à la valeur qui a été définie lors de la création de la séquence (ou lorsque la valeur a été définie précédemment).

ALTER SEQUENCE EMP_NO_GEN RESTART;
Example 3. Modification de la séquence

Modifier la valeur incrémentale de la séquence EMP_NO_GEN.

ALTER SEQUENCE EMP_NO_GEN INCREMENT BY 10;

CREATE OR ALTER SEQUENCE

affectation

Créer une nouvelle séquence ou modifier une séquence existante (générateur).

Disponible en

DSQL, ESQL

Syntaxe
CREATE OR ALTER {SEQUENCE | GENERATOR} seq_name
[{START WITH start_value | RESTART}]
[INCREMENT [BY] increment]
Table 1. Paramètres de l’opérateur CREATE OR ALTER SEQUENCE
Paramètre Description

seq_name

Le nom de la séquence (générateur). Peut contenir jusqu’à 63 caractères.

start_value

Valeur initiale de la séquence (générateur). La valeur par défaut est 1.

increment

Incrément d’étape. 4 octets entiers. La valeur par défaut est 1.

Si la séquence n’existe pas, elle sera créée. Une séquence déjà existante sera modifiée, en conservant les dépendances de la séquence existante.

Important

L’instruction CREATE OR ALTER SEQUENCE exige qu’au moins une des phrases facultatives soit spécifiée.

Exemples

Example 1. Création d’une nouvelle séquence ou modification d’une séquence existante
CREATE OR ALTER SEQUENCE EMP_NO_GEN
START WITH 10
INCREMENT BY 1;

DROP SEQUENCE

affectation

Suppression de la séquence (générateur).

Disponible en

DSQL, ESQL

Syntaxe
DROP {SEQUENCE | GENERATOR} seq_name
Table 1. Paramètres de l’opérateur DROP SEQUENCE
Paramètre Description

seq_name

Le nom de la séquence (générateur).

L’opérateur DROP SEQUENCE supprime une séquence existante (générateur). Les mots SEQUENCE et GENERATOR sont synonymes. Vous pouvez utiliser l’un ou l’autre, mais il est recommandé d’utiliser SEQUENCE. S’il existe des dépendances pour une séquence (générateur) existante, la suppression ne sera pas effectuée.

Qui peut supprimer un générateur ?

L’instruction DROP SEQUENCE (DROP GENERATOR) peut être exécutée :

  • Administrateurs

  • Le propriétaire de la séquence (générateur) ;

  • Les utilisateurs ayant le privilège DROP ANY SEQUENCE (DROP ANY GENERATOR).

Exemples

Example 1. Suppression de la séquence
DROP SEQUENCE EMP_NO_GEN;

RECREATE SEQUENCE

affectation

Créer ou recréer une séquence (générateur).

Disponible en

DSQL, ESQL

Syntaxe
RECREATE {SEQUENCE | GENERATOR} seq_name
  [START WITH start_value]
  [INCREMENT [BY] increment];
Table 1. Paramètres de l’opérateur RECREATE SEQUENCE
Paramètre Description

seq_name

Le nom de la séquence (générateur). Peut contenir jusqu’à 63 caractères.

start_value

Valeur initiale de la séquence (générateur).

increment

Incrément d’étape. Entier de 4 octets.

L’opérateur RECREATE SEQUENCE crée ou recrée une séquence (générateur). Si une séquence portant ce nom existe déjà, l’opérateur RECREATE SEQUENCE tentera de la supprimer et de créer une nouvelle séquence. S’il existe des dépendances pour une séquence existante, l’opérateur RECREATE SEQUENCE ne sera pas exécuté.

Exemples

Example 1. Recréer une séquence
RECREATE SEQUENCE EMP_NO_GEN
START WITH 10
INCREMENT BY 1;

SET GENERATOR

affectation

Règle la valeur de la séquence ou de l’oscillateur sur la valeur définie.

Disponible en

DSQL, ESQL

Syntaxe
SET GENERATOR seq_name TO new_val
Table 1. Paramètres de l’opérateur SET GENERATOR
Paramètre Description

seq_name

Le nom de la séquence (générateur).

new_val

Nouvelle valeur de la séquence (oscillateur). Un nombre entier de 64 bits dans la plage -263 . 263 - 1

L’opérateur SET GENERATOR fixe la valeur de la séquence ou du générateur à la valeur spécifiée.

Note

L’opérateur SET GENERATOR est considéré comme obsolète et a été abandonné par souci de rétrocompatibilité. Il est désormais recommandé d’utiliser l’opérateur ALTER SEQUENCE, conforme à la norme, à la place.

Une utilisation imprudente de l’opérateur SET GENERATOR (changement de la valeur d’une séquence ou d’un générateur) peut entraîner une perte d’intégrité des données logiques.

Qui peut changer la valeur du générateur ?

L’instruction SET GENERATOR peut être exécutée :

  • Administrateurs.

  • Le propriétaire de la séquence (générateur) ;

  • Utilisateurs avec le privilège ALTER ANY SEQUENCE (ALTER ANY GENERATOR).

Exemples

Example 1. Définition d’une valeur pour la séquence
SET GENERATOR EMP_NO_GEN TO 145;
Note

La même chose peut être faite en utilisant l’opérateur ALTER SEQUENCE

ALTER SEQUENCE EMP_NO_GEN RESTART WITH 145;