Auto Increment Column är ett ganska vanligt krav i kodningen. Här är några av sätten att få det i Oracle
Automatisk ökning i Oracle
Den här funktionen (Oracle Auto Increment Column – Sequence as Default Value) finns inte i Oracle-databasen än så länge. Men med 12c kan Oracle tillhandahålla det.
Anta att vi vill ställa in en orakeltabell där sekvensen ska ökas automatiskt vid infogning . Det finns många sätt att uppnå det
Alternativ 1
Före Oracle 12c måste vi använda innan vi sätter in triggers för att uppnå 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 specificera när id:t är null i triggers för att undvika felen när insert-satsen har ett värde för id-kolumnen
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;
Alternativ 2:
Med Oracle 12c kan vi direkt tilldela sekvens nextval som ett standardvärde för en kolumn, så du behöver inte längre skapa en trigger för att fylla kolumnen med nästa värde i sekvensen, du behöver bara deklarera det med tabelldefinitionen.
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;
Alternativ 3
Med 12c kan vi använda identifieringsfunktionen
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 att NOT NULL-begränsningen automatiskt införs i kolumnen Identitet
- Oracle använder internt sekvensen för att fylla i kolumnvärdena för automatisk ökning.
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;
Relaterade Oracle SQL-artiklar
hur man skapar en tabell i Oracle
Hur man skapar Oracle-vyer
Top-N-frågor och paginering
hur man skriver sql-frågor
Oracle sql-avkodningsbearbetning