SEQUENCE Oracle SQL : Définition, Syntaxe et Exemples

Découvrez la SEQUENCE Oracle SQL : définition, syntaxe complète, exemples pratiques et erreurs courantes. Guide complet pour générer des identifiants uniques.

Illustration du tutoriel SQL Oracle : SEQUENCE Oracle SQL : Définition, Syntaxe et Exemples

SEQUENCE Oracle SQL : Générer des Identifiants Uniques Automatiquement

La SEQUENCE Oracle SQL est un objet de base de données permettant de générer automatiquement des valeurs numériques uniques et séquentielles. Indispensable dans les environnements d’entreprise, elle est utilisée pour alimenter des clés primaires, des numéros de commande ou des identifiants techniques. Maîtriser la SEQUENCE Oracle vous permet de garantir l’unicité des données sans gérer manuellement les compteurs.

Publicité

Définition et utilisation d’une SEQUENCE Oracle SQL

Une SEQUENCE est un objet indépendant du schéma de table qui produit une suite de nombres entiers selon des règles définies à sa création. Elle est totalement autonome : elle ne dépend d’aucune table et peut être partagée entre plusieurs tables ou processus.

Cas d’usage en entreprise

  • Clé primaire automatique : générer un identifiant unique lors de chaque insertion dans une table (clients, commandes, factures).
  • Numérotation de documents : créer des numéros de bons de livraison ou de tickets de support horodatés.
  • Environnements multi-utilisateurs : garantir l’unicité des valeurs même lors d’accès concurrents à la base de données, sans risque de doublon.
  • Systèmes de log : attribuer un identifiant croissant à chaque événement enregistré dans une table d’audit.

Contrairement à une colonne IDENTITY (disponible depuis Oracle 12c), la SEQUENCE offre une flexibilité maximale : un seul objet peut alimenter plusieurs tables simultanément.

Syntaxe complète de la SEQUENCE Oracle


CREATE SEQUENCE nom_sequence
  [START WITH valeur_initiale]
  [INCREMENT BY pas_increment]
  [MINVALUE valeur_min | NOMINVALUE]
  [MAXVALUE valeur_max | NOMAXVALUE]
  [CYCLE | NOCYCLE]
  [CACHE taille_cache | NOCACHE]
  [ORDER | NOORDER];

Explication des paramètres essentiels

ParamètreDescriptionValeur par défaut
START WITHValeur de départ de la séquence1
INCREMENT BYPas d’incrément (positif ou négatif)1
MINVALUEValeur minimale autorisée1
MAXVALUEValeur maximale autorisée10^27
CYCLERecommence depuis MINVALUE après MAXVALUENOCYCLE
CACHENombre de valeurs pré-allouées en mémoire20
ORDERGarantit l’ordre des valeurs en environnement RACNOORDER

Les pseudo-colonnes NEXTVAL et CURRVAL

Pour utiliser une séquence, Oracle expose deux pseudo-colonnes :

  • nom_sequence.NEXTVAL : retourne la prochaine valeur disponible et incrémente le compteur.
  • nom_sequence.CURRVAL : retourne la valeur courante dans la session (nécessite qu’un NEXTVAL ait été appelé au préalable).
Publicité

Exemples pratiques de SEQUENCE Oracle SQL

Exemple 1 – Gestion des clients dans un système CRM

Contexte : Une entreprise souhaite attribuer automatiquement un identifiant unique à chaque nouveau client enregistré dans sa base CRM.


-- Étape 1 : Création de la table CLIENTS
CREATE TABLE CLIENTS (
  CLIENT_ID   NUMBER(10)    PRIMARY KEY,
  NOM         VARCHAR2(100) NOT NULL,
  EMAIL       VARCHAR2(150),
  DATE_CREATION DATE        DEFAULT SYSDATE
);

-- Étape 2 : Création de la séquence pour les identifiants clients
CREATE SEQUENCE SEQ_CLIENTS
  START WITH 1000       -- Les IDs commencent à 1000
  INCREMENT BY 1        -- Incrément de 1 à chaque appel
  MINVALUE 1000         -- Valeur minimale
  NOMAXVALUE            -- Pas de limite maximale
  NOCYCLE               -- Pas de remise à zéro
  CACHE 50;             -- 50 valeurs pré-allouées en mémoire

-- Étape 3 : Insertion d'un nouveau client en utilisant la séquence
INSERT INTO CLIENTS (CLIENT_ID, NOM, EMAIL)
VALUES (SEQ_CLIENTS.NEXTVAL, 'Martin Dupont', 'martin.dupont@email.fr');

-- Étape 4 : Vérification de la valeur courante dans la session
SELECT SEQ_CLIENTS.CURRVAL AS ID_GENERE FROM DUAL;

Résultat : le premier client aura l’identifiant 1000, le deuxième 1001, et ainsi de suite.

Exemple 2 – Numérotation automatique des commandes avec un TRIGGER

Contexte : Dans un système e-commerce, chaque commande doit recevoir automatiquement un numéro unique sans que l’application ait à le gérer.


-- Création de la table COMMANDES
CREATE TABLE COMMANDES (
  COMMANDE_ID   NUMBER(10)     PRIMARY KEY,
  CLIENT_ID     NUMBER(10)     NOT NULL,
  MONTANT       NUMBER(12, 2),
  DATE_COMMANDE DATE           DEFAULT SYSDATE
);

-- Création de la séquence pour les commandes
CREATE SEQUENCE SEQ_COMMANDES
  START WITH 100000     -- Numérotation à partir de 100000
  INCREMENT BY 1
  NOCYCLE
  CACHE 100;            -- Cache élevé pour de meilleures performances

-- Création d'un TRIGGER BEFORE INSERT pour alimenter automatiquement la clé
CREATE OR REPLACE TRIGGER TRG_COMMANDES_BI
BEFORE INSERT ON COMMANDES
FOR EACH ROW
BEGIN
  -- Si l'ID n'est pas fourni, on utilise la séquence
  IF :NEW.COMMANDE_ID IS NULL THEN
    :NEW.COMMANDE_ID := SEQ_COMMANDES.NEXTVAL;
  END IF;
END;
/

-- Insertion sans préciser l'ID : le TRIGGER s'en charge
INSERT INTO COMMANDES (CLIENT_ID, MONTANT)
VALUES (1000, 249.99);

-- Vérification du résultat
SELECT * FROM COMMANDES;

Résultat : la commande est insérée avec l’identifiant 100000, automatiquement attribué par le trigger et la séquence.

Erreurs courantes avec la SEQUENCE Oracle SQL

Erreur : ORA-08002 – CURRVAL non défini dans la session

Message d’erreur :

ORA-08002: sequence SEQ_CLIENTS.CURRVAL is not yet defined in this session

Cause : Vous tentez d’utiliser CURRVAL sans avoir appelé NEXTVAL au préalable dans la même session Oracle. CURRVAL ne peut retourner une valeur que si la séquence a déjà été incrémentée une fois dans la session en cours.

Solution : Appelez toujours NEXTVAL avant CURRVAL dans votre session :


-- Appel obligatoire de NEXTVAL en premier
SELECT SEQ_CLIENTS.NEXTVAL FROM DUAL;

-- CURRVAL est maintenant accessible dans cette session
SELECT SEQ_CLIENTS.CURRVAL FROM DUAL;

Résumé de la SEQUENCE Oracle SQL

Point cléDétail
Objet OracleGénérateur de valeurs numériques uniques et séquentielles
CréationCREATE SEQUENCE nom_sequence
Utilisationnom_sequence.NEXTVAL et nom_sequence.CURRVAL
CACHEAméliore les performances en pré-allouant des valeurs
CYCLEPermet la remise à zéro après MAXVALUE (à utiliser avec précaution)
IndépendanceUn seul objet peut alimenter plusieurs tables
ModificationALTER SEQUENCE (impossible de modifier START WITH)
SuppressionDROP SEQUENCE nom_sequence

2 bonnes pratiques Oracle

  1. Utilisez toujours CACHE : activez le cache (valeur recommandée entre 20 et 100) pour éviter les accès disque à chaque appel de NEXTVAL. En environnement à forte volumétrie, un NOCACHE peut sérieusement dégrader les performances.
  2. Ne comptez pas sur la continuité des valeurs : en cas de rollback d’une transaction ou de redémarrage du serveur, des « trous » peuvent apparaître dans la séquence. Ce comportement est normal sous Oracle. Si des numéros strictement continus sont requis, préférez une logique applicative dédiée.

Aller plus loin sur les objets Oracle SQL

Maintenant que vous maîtrisez la SEQUENCE Oracle SQL, approfondissez vos connaissances avec ces sujets complémentaires :

Publicité

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Publicité