Oracle 12c IDENTITY Columns & Default SEQUENCES

1 Eyl by Ahmet Duruöz

Oracle 12c IDENTITY Columns & Default SEQUENCES

Oracle 12c sürümündeki en çok sevdiğim yenilik olan identity alanını açıklamaya çalışacağım.

MS SQL, MYSQL kullanıcılarının bildiği bir konu olan otomatik artan alan artık Oracle veritabanlarında da kullanılabilir durumdadır. Daha önceden SEQUENCE oluşturup, tablo kayıt sırasında bu SEQUENCE’in yeni değerini alıp, işlem yapılırdı. Bunun için trigger da oluşturulabiliyordu. Oracle 12c bu işlem için 2 seçenek sunuyor : IDENTITY kolonu ve kolonun varsayılan değeri olarak kullanılacak SEQUENCE.

IDENTITY Kolonu

IDENTITY kolonu Oracle için yeni olmakla birlikte, diğer veritabanlarında yıllardır olan özellik idi. IDENTITY kolonları arka planda aslında bir SEQUENCE oluşturuyor. Fakat bu oluşturma otomatik yapılıyor. Tablo drop edildiğinde yada yeniden oluşturulduğunda IDENTITY değeri tekrar başlar.

Oracle veritabanlarında yıllardır SEQUENCE bulunmaktadır. IDENTITY kolonu, bir SEQUENCE’i kolon tanımının bir parçası olarak kullanımlasını sağlamaktadır.

Kullanımı :

•”GENERATED AS IDENTITY” şeklinde belirtiliyor.
•Varsayılan olarak 1 den başlar ve 1’er 1’er artar.
•START WITH ve INCREMENT BY ile değer atanabilir ve artım belirlenebilir.
•Eğer tablo drop edilirse yada yeniden oluşturulursa IDENTITY kolonu resetlenir.

Örnek 1 :
Bu örnekte IDENTITY ile kolonun değeri 1 den başlayıp , birer birer artırılabilir.

create table tablo1
(id number generated as IDENTITY, adsoyad varchar2(50));
--
insert into tablo1 (adsoyad) values ('Ahmet Duruöz');
insert into tablo1 (adsoyad) values ('Kemal Duru');
insert into tablo1 (adsoyad) values ('Ceyhun Yılmaz');
--
select * from tablo1;
ID          ADSOYAD
---------- ----------
1         Ahmet Duruöz
2         Kemal Duru
3         Ceyhun Yılmaz

Örnek 2 :
Bu örnekte IDENTITY kolonunun başlangıç değeri ve artış değeri belirtilmiştir.

create table tablo2
(id number generated as IDENTITY ( start with 10 increment by 11), isim
varchar2(10));
--
insert into tablo2 (isim) values ('Ahmet');
insert into tablo2 (isim) values ('Bekir');
insert into tablo2 (isim) values ('Cemal');
--
select * from tablo2;
ID          ISIM
---------- ----------
10         Ahmet
21         Bekir
32         Cemal

 

DEFAULT değeri bir SEQUENCE olan kolon :

Oracle 12c, kolon özelliklerini geliştirip, varsayılan değer atanmasını birkaç yöntemle sağlamıştır :

  • Kolon değeri NULL olarak eklendiğinde varsayılan bir değer atanabiliyor.
  • Kolonun varsayılan değeri bir SEQUENCE (.nextval yada .currval) ile verilebiliyor.

Örnek :
Bu örnekte id kolonun varsayılan değeri bir sequence olarak, soyad kolonun değeri NULL olduğunda ‘TANIMSIZ’ olarak verilmiştir. Bu sayede kolona otomatik değer atamak için trigger gereksinimi kalmıyor.

Önce sequence oluşturuyoruz:

create sequence default_test_seq start with 1 increment by 1;
--
create table tablo3
(id number default default_test_seq.nextval not null,
ad varchar2(10) ,
soyad varchar2(10) default on null 'TANIMSIZ' not null);
--
insert into tablo3 (ad,soyad) values ('Ahmet',null);
insert into tablo3 (ad) values ('Bekir');
insert into tablo3 (ad,soyad) values ('Kerim','Öner');
--
select * from tablo3;
ID           AD       SOYAD
---------- ---------- ----------
1             Ahmet          TANIMSIZ
2             Bekir          TANIMSIZ
3             Kerim          Öner

Loading

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir