Să presupunem că avem o bază de date și dorim ca fiecare intrare să fie identificată printr-un număr unic. Înaintea versiunii de bază de date Oracle 11g acest lucru era posibil doar cu ajutorul unui SELECT apelat într-un trigger. Această modalitate de incrementare necesită un swich de context de la motorul PL/SQL la motorul SQL.

create table test_table
(
id number primary key
);

create sequence test_seq start with 1 increment by 1 nocycle;

create or replace trigger test_trg
before insert on test_table
for each row
begin
select test_seq.nextval into :new.id
from dual;
end;

Începând cu versiunea Oracle 11g putem atribui direct o valoare secvenței unei variabile PL/SQL în trigger:

create table test_table
(
id number primary key
);

create sequence test_seq start with 1 increment by 1 nocycle;

create or replace trigger test_trg
before insert on test_tab
for each row
begin
:new.id := test_seq.nextval;
end;

În Oracle 12c putem atribui direct secvența NEXTVAL ca o valoare implicită pentru o coloană, nu mai este nevoie să se creeze un trigger pentru a popula coloana cu următoarea valoare a secvenței, trebuie doar să-l declarăm în definiția tabelei:

create sequence test_seq start with 1 increment by 1 nocycle;

create table test_table
(
id number default test_seq.nextval primary key
);

Lasă un răspuns

Completează mai jos detaliile despre tine sau dă clic pe un icon pentru autentificare:

Logo WordPress.com

Comentezi folosind contul tău WordPress.com. Dezautentificare / Schimbă )

Poză Twitter

Comentezi folosind contul tău Twitter. Dezautentificare / Schimbă )

Fotografie Facebook

Comentezi folosind contul tău Facebook. Dezautentificare / Schimbă )

Fotografie Google+

Comentezi folosind contul tău Google+. Dezautentificare / Schimbă )

Conectare la %s