SAP Tutoriel HANA : Créer une séquence
⚡ Résumé intelligent
Créer une séquence dans SAP HANA définit un objet de base de données qui génère automatiquement une liste incrémentée de valeurs numériques. Les paramètres contrôlent la valeur initiale, l'incrément, les limites, la boucle et le comportement de mise en cache du générateur.

Qu'est-ce que la séquence ?
Une séquence est un objet de base de données qui génère automatiquement la liste incrémentée de valeurs numériques conformément à la règle spécifiée dans la spécification de séquence.
Par exemple, pour insérer automatiquement le numéro d'employé dans la colonne (EMPLOYEE_NO) du tableau, lorsqu'un nouvel enregistrement est inséré dans le tableau, nous utilisons alors la séquence.
Les valeurs de séquence sont générées par ordre croissant ou décroissant.
Les séquences ne sont pas associées aux tables ; ils sont utilisés par l'application. Il y a deux valeurs en séquence –
- CURRVAL – Fournit la valeur actuelle de la séquence.
- NEXTVAL – Fournit la valeur suivante de la séquence.
SYNTAXE
CREATE SEQUENCE <sequence_name> [<sequence_parameter_list>] [RESET BY <subquery>]
ÉLÉMENTS DE SYNTAXE
| ÉLÉMENTS | DESCRIPTION |
|---|---|
| C'est le nom de la séquence. | |
| [ ] | Il spécifie un ou plusieurs paramètres de séquence. |
| COMMENCER AVEC | Il décrit la valeur de la séquence de départ. |
| AUGMENTATION DE | Ceci spécifie la valeur à incrémenter à partir de la dernière valeur attribuée à chaque fois qu'une nouvelle valeur de séquence est générée. La valeur par défaut est 1. |
| VALEUR MAX | Ceci spécifie la valeur maximale pouvant être générée par la séquence. peut être compris entre -4611686018427387903 et 4611686018427387902. |
| PAS DE VALEURMAX | Lorsque l'option NO MAXVALUE est spécifiée, pour une séquence ascendante, la valeur maximale sera de 4611686018427387903 et la valeur minimale pour une séquence descendante sera de -1. |
| VALEUR MIN / PAS DE MINVALEUR | Elle spécifie la valeur minimale qu'une séquence peut générer. peut être compris entre -4611686018427387904 et 4611686018427387902. Lorsque l'option NO MINVALUE est utilisée, la valeur minimale pour une séquence ascendante est 1. |
| CYCLE | La directive CYCLE spécifie que le numéro de séquence sera redémarré après avoir atteint sa valeur maximale ou minimale. |
| PAS DE CYCLE | Option par défaut. La directive NO CYCLE indique que le numéro de séquence ne sera pas redémarré après avoir atteint sa valeur maximale ou minimale. |
| CACHE | La taille du cache spécifie la plage de numéros de séquence qui sera mise en cache dans un nœud. doit être un entier non signé. |
| PAS DE CACHE | Option par défaut. La directive NO CACHE indique que le numéro de séquence ne sera pas mis en cache dans un nœud. |
| RÉINITIALISATION PAR | Il précise que lors du redémarrage de la base de données, la base de données exécute automatiquement le et la valeur de séquence est redémarrée avec la valeur renvoyée. |
Exemple -
Nous allons créer une séquence nommée DHK_SCHEMA.EMP_NO, qui créera une valeur incrémentée de la séquence de +1 à chaque fois, lorsque la séquence est utilisée.
Script de séquence –
CREATE SEQUENCE DHK_SCHEMA.EMP_NO START WITH 100 INCREMENT BY 1;
Ici, nous utiliserons l'objet « séquence » dans l'exemple ci-dessous pour incrémenter la valeur du numéro d'employé de +1 à chaque fois que la requête de sélection est exécutée. Dans la requête, le « nextval » peut être utilisé pour la génération de numéros de série ou le même type d'exigence.
Utilisation de la séquence –
SELECT DHK_SCHEMA.EMP_NO.nextval FROM DUMMY;
RÉSULTAT – 100, 101, 102 … et ainsi de suite pour chaque exécution de la requête SELECT ci-dessus.
Comment utiliser une séquence dans un tableau
L'exemple ci-dessus renvoie un nombre sans le stocker. Trois modèles permettent de relier une séquence à des données réelles ; le choix le plus approprié dépend du niveau de contrôle requis par l'application.
1) Appelez NEXTVAL directement dans l'INSERT. L'approche la plus explicite. L'application décide quand un nombre est consommé.
CREATE COLUMN TABLE DHK_SCHEMA.EMPLOYEE ( EMPLOYEE_NO INTEGER NOT NULL, EMP_NAME NVARCHAR(100), PRIMARY KEY (EMPLOYEE_NO) ); INSERT INTO DHK_SCHEMA.EMPLOYEE VALUES (DHK_SCHEMA.EMP_NO.NEXTVAL, 'Anita Sharma');
2) Utilisez la séquence comme valeur par défaut de colonne. Le numéro est attribué même lorsque l'instruction d'insertion ne mentionne pas la colonne, ce qui convient aux applications qui n'ont jamais été conçues pour connaître la séquence.
CREATE COLUMN TABLE DHK_SCHEMA.EMPLOYEE2 ( EMPLOYEE_NO INTEGER DEFAULT DHK_SCHEMA.EMP_NO.NEXTVAL, EMP_NAME NVARCHAR(100) ); INSERT INTO DHK_SCHEMA.EMPLOYEE2 (EMP_NAME) VALUES ('Ravi Kumar');
3) Lisez la valeur qui vient d'être émise. CURRVAL renvoie le dernier numéro utilisé lors de cette session, ce qui permet de lier une ligne enfant à la ligne parente qui vient d'être insérée.
SELECT DHK_SCHEMA.EMP_NO.CURRVAL FROM DUMMY;
⚠️ Attention : CURRVAL renvoie une erreur tant que NEXTVAL n'a pas été appelé au moins une fois dans la session en cours. Il renvoie la valeur émise pour cette session, et non la valeur maximale globale ; deux sessions peuvent donc avoir des valeurs actuelles différentes simultanément.
Colonne de séquence vs identité
SAP HANA propose également une colonne d'identité, qui génère des nombres sans objet distinct. Les deux solutions répondent au même problème, mais différemment.
| Paramètres | Séquence | Colonne d'identité |
|---|---|---|
| Type d'objet | Objet de base de données indépendant | Propriété de colonne d'une table |
| Partagé entre les tables | Oui, un nombre quelconque de tables peut y puiser. | Non, cela appartient à une seule colonne |
| Valeur visible avant insertion | Oui, via NEXTVAL | Non, généré lors de l'insertion |
| Définition | CRÉER UNE SÉQUENCE | GÉNÉRÉ PAR DÉFAUT COMME IDENTITÉ |
| Meilleur pour | Numérotation partagée, insertions parent et enfant | Une simple clé de substitution sur une table |
Choisissez une séquence lorsque le numéro doit être connu avant l'existence de la ligne, ou lorsque plusieurs tables partagent une même série de numérotation. Choisissez une colonne d'identité pour une clé de substitution simple, sans autre exigence.
Gestion des séquences : MODIFIER, SUPPRIMER et les lacunes
Une séquence reste rarement inchangée depuis sa création. Trois tâches de maintenance reviennent régulièrement.
Modifier le comportement. ALTER SEQUENCE ajuste l'incrément, les limites ou le cycle d'une séquence existante sans perteping La commande RESTART WITH réinitialise le compteur, ce qui est l'étape habituelle après un rechargement des données de test.
ALTER SEQUENCE DHK_SCHEMA.EMP_NO RESTART WITH 1000; ALTER SEQUENCE DHK_SCHEMA.EMP_NO INCREMENT BY 10; DROP SEQUENCE DHK_SCHEMA.EMP_NO;
Comprendre les lacunes. La contiguïté des numéros de séquence n'est pas garantie, ce qui surprend ceux qui s'attendent à une piste d'audit ininterrompue. Des lacunes apparaissent pour trois raisons :
- Transactions annulées. NEXTVAL n'est pas transactionnel. Un numéro utilisé lors d'une insertion qui est ensuite annulée n'est jamais réattribué.
- Mise en cache. Avec CACHE 100, un nœud réserve cent valeurs simultanément. Un redémarrage supprime les valeurs inutilisées de ce bloc.
- Sessions simultanées. Deux sessions insérant simultanément entrelacent leurs numéros, de sorte qu'aucune ne voit une séquence continue.
En pratique, une séquence doit être considérée comme une source d'identifiants uniques, et non comme un compteur du nombre de lignes. Lorsqu'une série ininterrompue est une obligation légale, comme pour la numérotation des factures, elle doit être générée par la logique applicative avec ses propres contrôles, et non par une séquence de base de données.
Trouver ce qui existe. La vue système SEQUENCES liste chaque séquence avec sa valeur actuelle, ce qui constitue le moyen le plus rapide d'auditer un schéma. La syntaxe associée est traitée dans SAP HANASQL et les définitions de colonnes dans SAP Types de données HANA.
