Oracle
 sql >> Base de données >  >> RDS >> Oracle

Qu'est-ce que la séquence dans Oracle

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
incrément de 1
maxvalue 4500000
cycle
nocache ;

 

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’,’’) from DUAL ;

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 -  minvalue 0 ;

É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

  1. Rollback se produit
  2. Crash du système ou plantage de l'instance
  3. 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.