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