Erstellen von AUTO_INCREMENT-ähnlichen Spalten in Oracle 11g
In Oracle-Versionen bis 11g ist der Spaltentyp AUTO_INCREMENT nicht nativ verfügbar. Es gibt jedoch alternative Mechanismen, um eine ähnliche Funktionalität zu erreichen.
Verwendung von Sequenzen und Triggern
Der häufigste Ansatz in Oracle 11g ist die Verwendung einer Kombination aus einer Sequenz und einem Auslöser:
Tabelle Definition:
CREATE TABLE departments ( ID NUMBER(10) NOT NULL, DESCRIPTION VARCHAR2(50) NOT NULL ); ALTER TABLE departments ADD ( CONSTRAINT dept_pk PRIMARY KEY (ID) ); CREATE SEQUENCE dept_seq START WITH 1;
Trigger-Definition:
CREATE OR REPLACE TRIGGER dept_bir BEFORE INSERT ON departments FOR EACH ROW BEGIN SELECT dept_seq.NEXTVAL INTO :new.id FROM dual; END; /
Dieser Trigger weist den neu eingefügten Zeilen einen eindeutigen, inkrementellen Wert zu und ahmt das Verhalten von nach Spalten automatisch inkrementieren.
IDENTITY-Spalten (Oracle 12c )
In Oracle 12c und höher wurde der Spaltentyp IDENTITY eingeführt, der eine echte Funktion zur automatischen Inkrementierung bereitstellt:
Tabellendefinition:
create table t1 ( c1 NUMBER GENERATED by default on null as IDENTITY, c2 VARCHAR2(10) );
Diese Definition erstellt eine Spalte „c1“, die automatisch für jede neue Zeile erhöht wird, die in die eingefügt wird Tabelle.
Alternativ können Sie Start- und Inkrementwerte angeben:
create table t1 ( c1 NUMBER GENERATED ALWAYS as IDENTITY(START with 1 INCREMENT by 1), c2 VARCHAR2(10) );
Sequenzen als Standardwerte verwenden (Oracle 12)
Eine weitere Option in Oracle 12 und höher besteht darin, eine Sequenz als Standardwert für a zu verwenden Spalte:
CREATE SEQUENCE dept_seq START WITH 1; CREATE TABLE departments ( ID NUMBER(10) DEFAULT dept_seq.nextval NOT NULL, DESCRIPTION VARCHAR2(50) NOT NULL ); ALTER TABLE departments ADD ( CONSTRAINT dept_pk PRIMARY KEY (ID) );
Dieser Ansatz weist inkrementelle Werte mithilfe einer Sequenz zu, aber der eigentliche Inkrementierungsvorgang wird von der Datenbank verwaltet.
Das obige ist der detaillierte Inhalt vonWie erstelle ich automatisch inkrementierende Spalten in Oracle 11g und höher?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!