Auto Increment Column ist eine recht häufige Anforderung in der Codierung. Hier sind einige Möglichkeiten, dies in Oracle zu erreichen
Automatisches Inkrement in Oracle
Diese Funktion (Oracle Auto Increment Column – Sequence as Default Value) ist bisher in der Oracle-Datenbank nicht vorhanden. Aber mit 12c ist Oracle in der Lage, das bereitzustellen.
Angenommen, wir möchten eine Orakeltabelle festlegen, in der die Sequenz beim Einfügen automatisch inkrementiert werden soll. Es gibt viele Möglichkeiten, dies zu erreichen
Möglichkeit 1
Vor Oracle 12c müssen wir Trigger vor dem Einfügen verwenden, um dies zu erreichen
create table test_lab ( id number primary key name varchar (10) ); create sequence test_lab_seq start with 1 increment by 1 nocycle; create or replace trigger test_lab_bef_auto before insert on test_lab for each row begin select test_lab_seq.nextval into :new.id from dual; end; /
oder
create or replace trigger test_lab_bef_auto
before insert on test_lab
for each row
begin
:new.id := test_lab_seq.nextval;
end;
/
Wir können angeben, wann die ID in Triggern null ist, um die Fehler zu vermeiden, wenn die Insert-Anweisung einen Wert der ID-Spalte hat
insert into test_lab values ('john'); insert into test_lab values ('scott'); insert into test_lab values ('bill'); insert into test_lab values ('tom'); insert into test_lab values ('Duke'); commit; select * from test_lab;
Möglichkeit 2:
Mit Oracle 12c können wir die Sequenz nextval direkt als Standardwert für eine Spalte zuweisen. Sie müssen also keinen Trigger mehr erstellen, um die Spalte mit dem nächsten Wert der Sequenz zu füllen, Sie müssen ihn nur noch mit deklarieren die Tabellendefinition.
create sequence test_lab_seq start with 1 increment by 1 nocycle; create table test_lab ( id number default test_lab_seq.nextval primary key ); insert into test_lab values ('Cat1'); insert into test_lab values ('Cat2'); insert into test_lab values ('Cat3'); insert into test_lab values ('Cat4'); insert into test_lab values ('Cat5'); commit; select * from test_lab;
Möglichkeit 3
Mit 12c können wir die Identifizierungsfunktion verwenden
create table test_lab ( id number(10) GENERATED AS IDENTITY, name varchar(15) ); Table created. Desc TEST_LAB Name Null? Type ---- ---- ---- ID NOT NULL NUMBER(10) NAME VARCHAR2(15)ein
- Wir können sehen, dass die Einschränkung NOT NULL automatisch der Identitätsspalte auferlegt wird
- Oracle verwendet intern die Sequenz, um die Spaltenwerte für die automatische Erhöhung aufzufüllen.
insert into test_lab values ('London'); insert into test_lab values ('New york'); insert into test_lab values ('Tokyo'); insert into test_lab values ('Delhi'); insert into test_lab values ('Bangalore'); commit; select * from test_lab;
Verwandte Artikel zu Oracle SQL
Wie erstelle ich eine Tabelle in Oracle
Wie erstelle ich Oracle-Ansichten
Top-N-Abfragen und Paginierung
Wie schreibe ich SQL-Abfragen
Oracle-SQL-Dekodierungsverarbeitung