Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Auto Increment Column – Sequenz als Standardwert in Oracle

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