sql >> Databasteknik >  >> RDS >> Oracle

Automatisk ökningskolumn – Sekvens som standardvärde i Oracle

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


  1. Hur upprepar jag ett resurs-id #6 från ett MySql-svar i PHP?

  2. Hur ställer man in primärnyckel för automatisk ökning i PostgreSQL?

  3. Mysql sträng delad

  4. Kopiera några av kolumnerna i en csv-fil till en tabell