Auto Increment Column is een vrij veel voorkomende vereiste bij het coderen. Hier zijn enkele manieren om dat in Oracle te krijgen
Automatische verhoging in orakel
Deze functie (Oracle Auto Increment Column – Sequence as Default Value) is tot nu toe niet aanwezig in de Oracle-database. Maar met 12c kan Oracle dat bieden.
Stel dat we een orakeltabel willen instellen waarin de reeks automatisch moet worden verhoogd bij invoegen . Er zijn veel manieren om dit te bereiken
Optie 1
Vóór Oracle 12c moeten we triggers vóór invoegen gebruiken om dit te bereiken
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; /
of
create or replace trigger test_lab_bef_auto
before insert on test_lab
for each row
begin
:new.id := test_lab_seq.nextval;
end;
/
We kunnen specificeren wanneer de id null is in triggers om fouten te voorkomen wanneer de insert-instructie een waarde heeft van de id-kolom
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;
Optie 2:
Met Oracle 12c kunnen we de reeks nextval direct toewijzen als standaardwaarde voor een kolom. U hoeft dus niet langer een trigger te maken om de kolom te vullen met de volgende waarde van de reeks, u hoeft deze alleen maar aan te geven met de tabeldefinitie.
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;
Optie 3
Met 12c kunnen we de identificatiefunctie gebruiken
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)
- We kunnen zien dat de beperking NOT NULL automatisch wordt opgelegd aan de kolom Identiteit
- Oracle gebruikt de reeks intern om de kolomwaarden voor automatisch verhogen in te vullen.
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;
Gerelateerde Oracle Sql-artikelen
hoe maak je een tabel in Oracle
Hoe maak je Oracle-weergaven
Top-N-query's en paginering
hoe schrijf je SQL-query's
Oracle SQL-decoderingsverwerking