Heim  >  Artikel  >  Datenbank  >  Oracle-Sequenz-SEQUENCE-Analyse

Oracle-Sequenz-SEQUENCE-Analyse

WBOY
WBOYnach vorne
2022-07-28 15:49:582282Durchsuche

Dieser Artikel vermittelt Ihnen relevantes Wissen über Oracle und erklärt die Sequenz SEQUENCE in Oracle im Detail. Der Artikel stellt sie anhand von Beispielcode ausführlich vor. Es hat einen gewissen Referenzwert für das Studium oder die Arbeit eines jeden und ich hoffe, dass es für jeden hilfreich sein wird.

Oracle-Sequenz-SEQUENCE-Analyse

Empfohlenes Tutorial: „Oracle-Video-Tutorial

1. Einführung in Sequenzen

Oracles Sequenz ist ein Datenbankobjekt, dessen Hauptfunktion darin besteht, eindeutige Werte zu generieren. Nachdem die Sequenz erstellt wurde, kann das Sequenzobjekt über das Datenwörterbuch gefunden werden, sodass die Sequenz von mehreren Objekten gemeinsam genutzt werden kann.

2. Erstellen Sie eine Sequenz

Die Sequenz wird mit der CREATE SEQUENCE-Syntax erstellt:

CREATE SEQUENCE sequence 
[INCREMENT BY n]
 [START WITH n]
 [{MAXVALUE n | NOMAXVALUE}]
 [{MINVALUE n | NOMINVALUE}]
 [{CYCLE | NOCYCLE}]
 [{CACHE n | NOCACHE}];
  • NCREMENT BY: Wird verwendet, um die Schrittgröße der Sequenz zu definieren. Wenn sie weggelassen wird, ist sie standardmäßig 1 , der Wert, der die Sequenz darstellt, ist Abnehmend.
  • START WITH: Definiert den Anfangswert der Sequenz (d. h. den ersten generierten Wert), der Standardwert ist 1.
  • MAXVALUE: Definiert den maximalen Wert, den die Sequenz generieren kann. NOMAXVALUE ist die Standardoption, was bedeutet, dass es keinen Maximalwert gibt. Zu diesem Zeitpunkt beträgt der maximale Wert, den das System erzeugen kann, 10 hoch 27, während der Maximalwert -1 ist.
  • MINVALUE: Definiert den Mindestwert, den die Sequenz generieren kann. NOMINVALUE ist die Standardoption, was bedeutet, dass es zu diesem Zeitpunkt keinen Mindestwert gibt, den das System für die absteigende Folge erzeugen kann: minus 10 hoch 26; für die absteigende Folge beträgt der Mindestwert 1.
  • CYCLE und NOCYCLE: Geben an, ob eine Schleife ausgeführt werden soll, wenn der Wert des Sequenzgenerators den Grenzwert erreicht. Bei einer Schleife erfolgt die Schleife, wenn die aufsteigende Sequenz den Maximalwert erreicht. Bei der absteigenden Sequenz erfolgt die Schleife auf den Maximalwert, wenn sie den Minimalwert erreicht. Wenn Sie keine Schleife ausführen, kommt es nach Erreichen des Grenzwerts zu einem Fehler, wenn Sie weiterhin neue Werte generieren.
  • CACHE: Definiert die Größe des Speicherblocks zum Speichern der Sequenz, der Standardwert ist 20. NOCACHE bedeutet keine Speicherpufferung der Sequenz. Durch die Speicherpufferung von Sequenzen kann die Sequenzleistung verbessert werden.

Zum Beispiel:

CREATE SEQUENCE invoice_seq
INCREMENT BY 1
START WITH 1
MAXVALUE 9999999
NOCYCLE NOCACHE;

3. Abfragesequenz

Sobald die Sequenz erstellt ist, wird der Sequenzerstellungscode im Datenwörterbuch textualisiert und kann im Datenwörterbuch user_objects angezeigt werden, z. B.:

SELECT object_name,object_id,object_type  FROM user_objects WHERE object_name = 'INVOICE_SEQ';

In den user_sequences Tabelle Gespeicherte Sequenzdetails:

SELECT sequence_name, min_value, max_value, increment_by, last_number  FROM user_sequences;

4. Verwenden Sie die Pseudospalten Sequenz

NEXTVAL: Gibt jedes Mal einen eindeutigen referenzierten Wert zurück, tatsächlich für verschiedene Benutzer. Bei Verwendung von sequence.NEXTVAL wird eine neue Sequenznummer generiert und die aktuelle Sequenznummer in CURRVAL eingefügt.
  • CURRVAL: Ermitteln Sie den aktuellen Sequenzwert. Wenn Sie CURRVAL verwenden, bevor Sie NEXTVAL zum ersten Mal verwenden, wird ein Fehler gemeldet.
  • Wird wie folgt verwendet:
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  );

NEXTVAL und CURRVAL können im folgenden Kontext verwendet werden:

Die Feldliste einer SELECT-Anweisung, die nicht Teil einer Unterabfrage ist.
  • SELECT-Liste der Unterabfragen in der INSERT-Anweisung.
  • VALUES-Klausel in der INSERT-Anweisung.
  • SET-Klausel in der UPDATE-Anweisung.
NEXTVAL und CURRVAL können nicht im folgenden Kontext verwendet werden:

SELECT-Liste einer Ansicht.
  • SELECT-Anweisung mit DISTINCT.
  • SELECT-Anweisung mit GROUP BY-, HAVING- oder ORDER BY-Klausel.
  • Klauseln in SELECT-, DELETE- oder UPDATE-Anweisungen.
  • DEFAULT-Ausdruck in der CREATE TABLE- oder ALTER TABLE-Anweisung.
  • Beachten Sie außerdem, dass ROLLBACK den Sequenzwert nicht zurücksetzt.

5. Ändern Sie die Sequenz

Zum Beispiel:

ALTER SEQUENCE invoice_seq     INCREMENT BY 2 MAXVALUE 10   NOCACHE  NOCYCLE;

Beim Ändern der Sequenz gibt es folgende Einschränkungen:

Der Startwert der Sequenz kann nicht aufgeführt werden.
  • Der Mindestwert darf nicht größer sein als der aktuelle Wert.
  • Der Maximalwert darf nicht kleiner als der aktuelle Wert sein.
  • Die geänderten Sequenzregeln wirken sich nicht auf frühere Sequenzwerte aus, sondern nur auf zukünftige Sequenzwerte.
  • Der Benutzer muss über die Berechtigung ALTER SEQUENCE verfügen.
  • 6. Sequenz löschen
DROP SEQUENCE invoice_seq;

7. Automatisch inkrementierende Sequenz erstellen

create sequence sq_recid 
minvalue 1 maxvalue 999999  increment by 1   start with 1 noCYCLE;

2. Einen Trigger erstellen

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;

3. In C# können Sie eine Sequenz auch manuell einfügen

string sql="insert into test(ID,otherCol)value (Sql_recid.nextval,***)
    retuing ID into :ID"

Empfohlenes Tutorial: „

Oracle Video Tutorial

Das obige ist der detaillierte Inhalt vonOracle-Sequenz-SEQUENCE-Analyse. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:jb51.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen