sql >> Databáze >  >> RDS >> Oracle

Auto Increment Column – Sekvence jako výchozí hodnota v Oracle

Auto Increment Column je docela běžný požadavek v kódování. Zde je několik způsobů, jak toho dosáhnout v Oracle

Automatické zvýšení v oracle

Tato funkce (Oracle Auto Increment Column – Sequence as Default Value) zatím není v databázi Oracle přítomna. Ale s 12c je oracle schopen to poskytnout.

Předpokládejme, že chceme nastavit tabulku orákula, kde by se sekvence měla automaticky zvyšovat na insert . Existuje mnoho způsobů, jak toho dosáhnout

Možnost 1
Před Oracle 12c musíme k dosažení tohoto cíle používat triggery před vložením

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;
/

nebo

create or replace trigger test_lab_bef_auto
before insert on test_lab
for each row
begin
:new.id := test_lab_seq.nextval;
end;
/

Můžeme určit, kdy je id ve spouštěčích null, abychom se vyhnuli chybám, když má příkaz insert hodnotu sloupce id

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;

Možnost 2:
S Oracle 12c můžeme přímo přiřadit sekvenci nextval jako výchozí hodnotu pro sloupec, takže již nemusíte vytvářet spouštěč pro naplnění sloupce další hodnotou sekvence, stačí ji deklarovat pomocí definice tabulky.

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;

Možnost 3
U 12c můžeme použít funkci identifikace

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)
  • Vidíme, že omezení NOT NULL je automaticky uvaleno na sloupec Identita
  • Oracle interně používá sekvenci k naplnění hodnot sloupců s automatickým přírůstkem.
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;

Související články Oracle Sql

jak vytvořit tabulku v oracle
Jak vytvořit pohledy Oracle
Nejčastější dotazy a stránkování
jak psát dotazy SQL
Zpracování dekódování Oracle SQL


  1. Jak otestovat, zda je řetězec JSON nebo ne?

  2. Migrace MySQL na PostgreSQL na AWS RDS, část 3

  3. Nejúčinnější způsob, jak v SQL Server získat datum z data a času?

  4. Jak zkontrolovat, zda soubor existuje v PL/SQL?