Maison > base de données > Oracle > le corps du texte

Analyse de séquence Oracle SEQUENCE

WBOY
Libérer: 2022-07-28 15:49:58
avant
2304 Les gens l'ont consulté

Cet article vous apporte des connaissances pertinentes sur Oracle et explique en détail la séquence SEQUENCE dans Oracle. L'article la présente en détail à travers un exemple de code. Il a une certaine valeur de référence pour les études ou le travail de chacun, et j'espère qu'il sera utile à tout le monde.

Analyse de séquence Oracle SEQUENCE

Tutoriel recommandé : "Tutoriel vidéo Oracle"

1. Introduction aux séquences

La séquence d'Oracle est un objet de base de données dont la fonction principale est de générer des valeurs uniques. Une fois la séquence créée, l'objet séquence peut être trouvé via le dictionnaire de données, de sorte que la séquence peut être partagée par plusieurs objets.

2. Créer une séquence

La séquence est créée en utilisant la syntaxe CREATE SEQUENCE :

CREATE SEQUENCE sequence 
[INCREMENT BY n]
 [START WITH n]
 [{MAXVALUE n | NOMAXVALUE}]
 [{MINVALUE n | NOMINVALUE}]
 [{CYCLE | NOCYCLE}]
 [{CACHE n | NOCACHE}];
Copier après la connexion
  • NCREMENT BY : utilisée pour définir la taille du pas de la séquence. Si elle est omise, la valeur par défaut est 1. S'il s'agit d'une valeur négative. , la valeur représentant la séquence est Décroissante.
  • START WITH : Définit la valeur initiale de la séquence (c'est-à-dire la première valeur générée), la valeur par défaut est 1.
  • MAXVALUE : Définit la valeur maximale que la séquence peut générer. NOMAXVALUE est l'option par défaut, ce qui signifie qu'il n'y a pas de valeur maximale à ce stade, pour la séquence croissante, la valeur maximale que le système peut générer est de 10 à la puissance 27 pour la séquence décroissante, la valeur maximale est de -1 ;
  • MINVALUE : Définissez la valeur minimale que la séquence peut générer. NOMINVALUE est l'option par défaut, ce qui signifie qu'il n'y a pas de valeur minimale à l'heure actuelle, pour la séquence décroissante, la valeur minimale que le système peut générer est moins 10 à la puissance 26 pour la séquence décroissante, la valeur minimale est 1.
  • CYCLE et NOCYCLE : Indiquez s'il faut boucler lorsque la valeur du générateur de séquence atteint la limite. En boucle, lorsque la séquence croissante atteint la valeur maximale, elle boucle jusqu'à la valeur minimale ; pour la séquence descendante, lorsqu'elle atteint la valeur minimale, elle boucle jusqu'à la valeur maximale. Si vous ne bouclez pas, après avoir atteint la valeur limite, une erreur se produira si vous continuez à générer de nouvelles valeurs.
  • CACHE : Définit la taille du bloc mémoire pour stocker la séquence, la valeur par défaut est 20. NOCACHE signifie aucune mise en mémoire tampon de la séquence. La mise en mémoire tampon des séquences peut améliorer les performances des séquences.

Par exemple :

CREATE SEQUENCE invoice_seq
INCREMENT BY 1
START WITH 1
MAXVALUE 9999999
NOCYCLE NOCACHE;
Copier après la connexion

3. Requête de séquence

Une fois la séquence créée, le code de création de séquence est textualisé dans le dictionnaire de données et peut être vu dans le dictionnaire de données user_objects, tel que :

SELECT object_name,object_id,object_type  FROM user_objects WHERE object_name = 'INVOICE_SEQ';
Copier après la connexion

Dans le user_sequences table Détails de la séquence enregistrée :

SELECT sequence_name, min_value, max_value, increment_by, last_number  FROM user_sequences;
Copier après la connexion

4. Utilisez la séquence

NEXTVAL et les pseudo-colonnes CURRVAL

  • NEXTVAL : renvoie la prochaine valeur de séquence disponible. Elle renvoie une valeur référencée unique à chaque fois, en fait pour différents utilisateurs de cette manière. Lors de l'utilisation de séquence.NEXTVAL, un nouveau numéro de séquence est généré et le numéro de séquence actuel est placé dans CURRVAL.
  • CURRVAL : Obtenez la valeur de séquence actuelle. Si vous utilisez CURRVAL avant d'utiliser NEXTVAL pour la première fois, une erreur sera signalée.

Utilisé comme suit :

SELECT invoice_seq.CURRVAL,invoice_seq.NEXTVAL FROM DUAL;

INSERT INTO invoice  (invoice_id, vendor_id, invoice_number, invoice_total  )
      VALUES (invoice_seq.NEXTVAL, 10, 'INV' || invoice_seq.CURRVAL, 100  );
Copier après la connexion

NEXTVAL et CURRVAL peuvent être utilisés dans le contexte suivant :

  • La liste de champs d'une instruction SELECT qui ne fait pas partie d'une sous-requête.
  • SELECT liste de sous-requêtes dans l'instruction INSERT.
  • Clause VALUES dans l'instruction INSERT.
  • Clause SET dans l'instruction UPDATE.

NEXTVAL et CURRVAL ne peuvent pas être utilisés dans le contexte suivant :

  • SELECT liste d'une vue.
  • Instruction SELECT avec DISTINCT.
  • Instruction SELECT avec la clause GROUP BY, HAVING ou ORDER BY.
  • Clauses dans les instructions SELECT, DELETE ou UPDATE.
  • Expression DEFAULT dans l'instruction CREATE TABLE ou ALTER TABLE.

Notez également que ROLLBACK ne restaure pas la valeur de la séquence.

5. Modifier la séquence

Par exemple :

ALTER SEQUENCE invoice_seq     INCREMENT BY 2 MAXVALUE 10   NOCACHE  NOCYCLE;
Copier après la connexion

Lors de la modification de la séquence, il existe les restrictions suivantes :

  • La valeur de départ de la séquence ne peut pas être répertoriée.
  • La valeur minimale ne peut pas être supérieure à la valeur actuelle.
  • La valeur maximale ne peut pas être inférieure à la valeur actuelle.
  • Les règles de séquence modifiées n'affecteront pas les valeurs de séquence précédentes, seules les valeurs de séquence futures seront affectées.
  • L'utilisateur doit disposer de l'autorisation ALTER SEQUENCE.

6. Supprimer la séquence

DROP SEQUENCE invoice_seq;
Copier après la connexion

7. Créer une séquence à incrémentation automatique

1 Créer une séquence

create sequence sq_recid 
minvalue 1 maxvalue 999999  increment by 1   start with 1 noCYCLE;
Copier après la connexion

2 Créer un déclencheur

create or replace trigger  trg_test
  before  insert on test for each row
begin
  select sq_recid.nextval into :new.ID from dual;
end;

alter  trigger trg_test  enable;
Copier après la connexion

3. En C#, vous pouvez également insérer manuellement une séquence dans la table.

string sql="insert into test(ID,otherCol)value (Sql_recid.nextval,***)
    retuing ID into :ID"
Copier après la connexion

Tutoriel recommandé : "Tutoriel vidéo Oracle"

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:jb51.net
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal