sql >> Database >  >> RDS >> Oracle

Kolom automatisch verhogen - Volgorde als standaardwaarde in Oracle

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


  1. MySQL - ORDER BY-waarden binnen IN()

  2. Hoe u JSON-geformatteerde queryresultaten kunt verfraaien in SQLcl (Oracle)

  3. Hoe voorkomt SQLParameter SQL-injectie?

  4. Een overzicht van tools voor taakplanning voor PostgreSQL