Auto Increment Column er et ganske almindeligt krav i kodningen. Her er nogle af måderne at få det i Oracle
Automatisk stigning i Oracle
Denne funktion (Oracle Auto Increment Column – Sequence as Default Value) er ikke til stede i Oracle-databasen indtil videre. Men med 12c er Oracle i stand til at levere det.
Antag, at vi ønsker at sætte en orakel-tabel, hvor sekvensen automatisk skal inkrementeres ved indsættelse. Der er mange måder at opnå det på
Mulighed 1
Før Oracle 12c skal vi bruge før indsættelse af triggere for at opnå det
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; /
eller
create or replace trigger test_lab_bef_auto
before insert on test_lab
for each row
begin
:new.id := test_lab_seq.nextval;
end;
/
Vi kan angive, hvornår id'et er null i triggere for at undgå fejlene, når insert-sætningen har en værdi af id-kolonnen
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;
Mulighed 2:
Med Oracle 12c kan vi direkte tildele sekvens nextval som en standardværdi for en kolonne, så du behøver ikke længere oprette en trigger for at udfylde kolonnen med den næste værdi af sekvensen, du skal bare erklære den med tabeldefinitionen.
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;
Mulighed 3
Med 12c kan vi bruge identifikationsfunktionen
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)
- Vi kan se, at NOT NULL-begrænsningen automatisk pålægges kolonnen Identitet
- Oracle bruger internt sekvensen til at udfylde kolonneværdierne for automatisk stigning.
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;
Relaterede Oracle SQL-artikler
hvordan man opretter tabel i Oracle
Sådan opretter man Oracle-visninger
Top-N-forespørgsler og sideinddeling
hvordan man skriver sql-forespørgsler
Oracle sql-afkodningsbehandling