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.
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!