Oracle 12C Identity kolon

Oracle 12C identity column:

Bu makalemizde oracle 12C ile gelen identity kolonunu inceleyeceğiz,12C öncesi versiyonlarda kolon için sequence veya trigger ile artan sıralı değerler üretiyorduk,12C versiyonu ile artık otomatik olarak kolon kendisini artırabilecek.Aslında biraz geç geldiğini düşünüyorum,diğer bir çok veritabanında olmasına rağmen oracle’da yoktu.(SQL server identity vb) Performansı trigger ve sequence’e göre daha iyi.
En çok da yazılımcıların işine yarayacak , trigger ve sequence’le uğraşmayacaklar..

12C’de tablo oluştururken kolonun identity kolon oldugunu belirtiyoruz, ve tablomuza insert ederken bir değer göndermemize gerek kalmıyor.

Örnek yapalım..

CREATE TABLE person_info_tab (
kisi_id NUMBER GENERATED ALWAYS AS IDENTITY,
ad VARCHAR2(50),
soyad VARCHAR2(50));

Tablomuzu oluşturduk, veri girişi yapalım.

INSERT INTO person_info_tab (isim,soyad)  VALUES ('Ali','AKÇAY');

kisi_id kolonuna veri girmedik select çekip sonuca bakalım.

SELECT * FROM person_info_tab;
kisi_id   ad     soyad
1         Ali    AKÇAY

Eğer identity kolonuna veri insert etmek isterseniz aşağıdaki hatayı alırsınız.

INSERT INTO person_info_tab (kisi_di,isim,soyad) VALUES (1,'Ali','AKÇAY');
 
Hata:ORA-32795: cannot insert into a generated always identity column

Identity kolonuna veri girişine izin verilmiyor,oracle otomatik kendisi artırıyor.

12C öncesi versiyonlarda Sequence ile id üretmek:

12C öncesi versiyonlarda nasıldı, nasıl çözüyorduk ? Onu da örnekleyelim..

Tablomuzu oluşturalım.

CREATE TABLE person_info_tab (
kisi_id NUMBER,
ad VARCHAR2(50),
soyad VARCHAR2(50) );

Sıra numarası üretecek sequence’i olusturalım.

CREATE SEQUENCE kisi_id_seq start with 1 increment by 1 nocycle;

Tablomuza veri girerken kisi_id kolonuna sequence’in değerini gönderelim.

INSERT INTO person_info_tab
(kisi_di,isim,soyad)
VALUES
(kisi_id_seq.nextval,'Ali','AKÇAY');

ya da trigger ile bu atamayı da yapabiliriz.Trigger her insertte sequenceden çekeceği son değeri tabloya insert edecektir.

CREATE OR REPLACE TRIGGER kisi_id_trg
BEFORE INSERT ON person_info_tab
FOR EACH ROW
BEGIN
SELECT kisi_id_seq.nextval INTO :new.kisi_id FROM dual;
END kisi_id_trg;

Umarım faydalı olur..

Sequence için daha detaylı bilgi:

http://omeracar.com.tr/sequence-nedir-nasil-kullanilir/

trigger için daha detaylı bilgi :

http://omeracar.com.tr/oracle-trigger-ve-ornekler/

Tagged: , , , , , , , , , , , ,

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir