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