sql >> Database teknologi >  >> RDS >> Oracle

Automatisk stigningskolonne – Sekvens som standardværdi i Oracle

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


  1. SQL DROP DATABASE Syntaks – Listet efter DBMS

  2. Hvordan får man slutningen på en dag?

  3. Nye datoer for gratis certificeringseksamener på Oracle Cloud og Autonomous Database

  4. Fjern polstring, når du sender forespørgselsresultater i en e-mail fra SQL Server (T-SQL)