Qu'est-ce que la séquence dans Oracle
- Oracle Sequence est un objet créé par l'utilisateur qui peut être partagé par plusieurs utilisateurs pour générer des entiers uniques
- L'utilisation la plus générale des séquences serait de générer une colonne de clé primaire dans la table.
- La séquence est générée par la routine interne d'Oracle, nous n'avons donc pas à nous soucier de . Cela permettra d'économiser tim3 car le développeur n'a pas besoin de générer la routine de production de séquence
- Un générateur de nombres séquentiels, peut être configuré pour augmenter ou diminuer
- Il n'existe que dans le dictionnaire de données, peut être limité ou répétable (cycle).
- Nous avons besoin du privilège de création de séquence pour créer la séquence
La création d'une séquence se fait à l'aide de
CRÉER SÉQUENCE
[COMMENCER PAR] [INCRÉMENTER DE] [NO/MINVALUE] [NO/MAXVALUE] [NON/CYCLE] [NON/CACHE] ;
|
Description de chaque valeur
COMMENCER PAR | Il définit la valeur initiale de la séquence (par défaut 1 ), |
INCRÉMENTER DE | Il définit le niveau d'augmentation ou de diminution (par défaut 1 ), |
MINVALUE | Il définit la valeur la plus basse pour une séquence décroissante |
VALEURMAX | Il définit la valeur la plus élevée pour une séquence croissante |
CYCLE | Il définit si la séquence se répétera |
CACHE | Il définit le bloc de numéros de séquence conservés en mémoire (20 par défaut ), NOCACHE force la mise à jour du dictionnaire de données pour chaque nombre généré par la séquence |
Exemples
créer la séquence test_tech commencer par 1 incrément de 1 maxvalue 10000 cycle cache 20 ;
créer la séquence test_tech1
commencer par 1 |
Comment utiliser les séquences
Pour utiliser la séquence, utilisez simplement les pseudo-colonnes CURRVAL et NEXTVAL
Pseudo-colonne NEXTVAL
Il est utilisé pour générer le numéro de séquence successif de la séquence spécifiée
Pseudo-colonne CURRVAL
Il contient la séquence que l'utilisateur vient de générer
SELECT TEST_TECH.NEXTVAL FROM DUAL ;
SÉLECTIONNEZ TEST_TECH.CURRVAL À PARTIR DE DOUBLE ; SÉLECTIONNEZ TEST_TECH.NEXTVAL À PARTIR DE DOUBLE ; |
Comment modifier les séquences
Nous pouvons modifier les séquences en utilisant alter sequence.
SQL> ALTER SEQUENCE tech_test1 INCREMENT BY 50 ; |
Les modifications n'affectent que l'utilisation future de la séquence.
Vous devez être le propriétaire ou avoir un privilège de modification sur cette séquence
Nous ne pouvons pas changer l'option start with. Cette séquence doit être supprimée et recréée
Les changements de séquence sont également validés
Comment déposer la séquence
La suppression d'une vue s'effectue à l'aide de la commande de séquence DROP.
Déposez la séquence test_tech ; |
Vues du dictionnaire pour voir les données de séquence
les détails de la séquence peuvent être interrogés à partir du dictionnaire en interrogeant soit USER_SEQUENCES, ALL_ SEQUENCES ou DBA_ SEQUENCES. Il existe trois catégories de vues
USER_% | Cette vue contient uniquement des informations sur les objets appartenant à l'utilisateur
Exemple USER_TABLES,USER_TAB_COLS |
ALL-% | Cette vue contient des informations sur les objets auxquels l'utilisateur peut accéder dans la base de données.
Exemple TOUTES_TABLES, TOUTES_TAB_COLS |
DBA_% | Cette vue contient des informations sur tous les objets du système. Il s'agit de vues restreintes accessibles à l'utilisateur disposant du rôle DBA
Exemple DBA_TABLES,DBA_TAB_COLS |
DBA_ % de vues sur les informations de séquences | TOUTES_ % de vues sur les informations sur les séquences | USER_ % de vues sur les informations de séquences | |
Afficher les séquences informations | dba_sequences | toutes_séquences | séquences_utilisateur |
Pour lister toutes les séquences appartenant à l'utilisation actuelle
sélectionnez nom_séquence dans les séquences utilisateur ;
Pour lister toutes les séquences d'une base de données :
Sélectionnez le propriétaire, sequence_name dans dba_sequences ;
Pour lister les séquences accessibles à l'utilisateur actuel :
sélectionner sequence_name de all_sequences
Comment déterminer toutes les informations sur la séquence ?
select sequence_name,min_value,max_value,increment_by,last_number
FROM DBA_SEQUENCES
où OWNER ='
et sequence_NAME ='
Comment récupérer la valeur actuelle d'une séquence oracle sans l'incrémenter
La colonne last_number affiche le prochain numéro de séquence disponible si aucun cache n'est spécifié
SELECT last_number
FROM user_sequences
WHERE sequence_name =' |
Comment extraire la définition de séquence (instructions DDL) d'une base de données Oracle sans avoir à parcourir une pile de vues de dictionnaire
Syntaxe :
SQL> set long 1000 SQL> set pagesize 0select DBMS_METADATA.GET_DDL(‘SEQUENCE’,’
|
Comment définir la valeur LASTVALUE dans une séquence Oracle
ALTER SEQUENCE tech_seq_name INCREMENT BY 250 ;
SELECT tech_seq_name.nextval FROM double ; MODIFIER LA SÉQUENCE tech_seq_name INCRÉMENTER DE 1 ; |
Comment réinitialiser une séquence dans Oracle
Il existe de nombreuses façons.
a) Nous pouvons supprimer et recréer la séquence. Mais cela invalide tous les objets dépendants (déclencheurs/procédures stockées, etc.)
b) Nous pouvons réinitialiser par ces étapes simples
Étape 1 :Trouver la dernière valeur de la séquence
Sélectionnez tech_seq_name.nextval FROM dual ; Étape 2 :modifiez la séquence en incrémentant la valeur négative de la dernière valeur
ALTER SEQUENCE tech_seq_name INCREMENT BY - Étape 3 Effectuez nextval pour le remettre à zéro SELECT tech_seq_name.nextval FROM double ; Étape 4 :Redéfinissez l'incrément sur 1 MODIFIER LA SÉQUENCE tech_seq_name INCRÉMENTER DE 1 ; Exemple SELECT tech_seq_name.nextval FROM double ; ————————————— 250 ALTER SEQUENCE tech_seq_name INCREMENT BY -250 ; SELECT tech_seq_name.nextval FROM double ; MODIFIER LA SÉQUENCE tech_seq_name INCRÉMENTER DE 1 ; |
Vous pouvez en savoir plus sur ce lien
Comment réinitialiser la séquence
Impact de la mise en cache des séquences
Les séquences sont mises en cache dans le but d'améliorer les performances de récupération. Dans RAC, chaque instance stocke les valeurs du cache
Nous pouvons avoir des écarts dans la séquence lors de l'utilisation du cache pour les raisons suivantes
- Rollback se produit
- Crash du système ou plantage de l'instance
- La séquence est utilisée dans une autre table
Il y a une nouvelle fonctionnalité dans Oracle 12c pour les séquences
Séquences de session
Avec Oracle Database 12C, de nouveaux mots-clés SESSION, GLOBAL sont disponibles et peuvent être spécifiés lors de la création d'une séquence
Global | Session |
crée une séquence standard bien connue dans la version précédente. C'est la valeur par défaut. | crée une nouvelle séquence de session de type, qui est un type spécial de séquence spécialement conçu pour être utilisé avec des tables temporaires globales qui ont une visibilité de session. La séquence de session renvoie une plage unique de numéros de séquence uniquement au sein d'une session, mais pas entre les sessions. Une autre différence est que les séquences de session ne sont pas persistantes. Si une session disparaît, il en va de même pour l'état des séquences de session auxquelles on a accédé pendant la session. |