Oracle’da Sequence Oluşturmak

Veri tabanlarına veri yazarken en sık karşılaşacağınız durumlardan birisi, anahtar alan olarak ifade ettiğiniz alanın, çakışmayacak şekilde ve hatta sıralı olarak oluşturulması. Bunu uygulamada sağlamak için tonla iş yapmanız lazım. Ya da anahtar alanınız TCKN gibi tekliği başkaları tarafından sağlanan bir bilgi tutmalı ki çakışma ya da sıralı olma problemi olmasın.

Veri tabanları bu durumlar için bazı çözümler sunar. Oracle’ın sequencei ya da MS SQL Server’ın Identity sütunu bu işe yarar. Aşağıda böyle bir sequence Oracle’da nasıl oluşturulur ve bir tablonun anahtar alanını otomatik ve sıralı olarak arttırmak amacıyla nasıl kullanılır hızlıca açıklanmıştır.

Önce aşağıdaki gibi bir ifade ile Oracle’da (bu arada ben Oracle XE kullanıyorum) bir sequence oluşturun:

[cc lang=”sql”]
CREATE SEQUENCE BILLIDSEQUENCE START WITH 1 INCREMENT BY 1
[/cc]

Koddan da anlaşılacağı üzere 1’den başlayıp 1’er artan bir sequence oluşturduk.

Şimdi de BILL tablosuna yazılan her kayıt için bu sequenceden bir sonraki değeri almalıyız. Bu da Oracle’da trigger denen tetikleyicilerle yapılır. Aşağıdaki kod da böyle bir tetikleyici oluşturuyor:

[cc lang=”sql”]
CREATE OR REPLACE TRIGGER BILLIDINSERT

BEFORE INSERT ON BILL FOR EACH ROW
BEGIN
SELECT BILLIDSEQUENCE.NEXTVAL INTO:NEW.NO

FROM DUAL;
END;
[/cc]

Yukarıdaki gibi bir tetikleyici sadece tabloya yeni bir değer girerken değil, farklı olaylarla da çalışabilir şekilde oluşturulabilir. Ben sadece anahtar alan üretmede kullandım böyle bir tetikleyiciyi.

Bu arada çok sık karşılaşılan bir problemi de ifade edeyim. Oracle tablolarıki sütun adlarında “DATE” gibi Oracle’ın anahtar kelimelerinden birini kullanırsanız, daha önce hatayla karşılaşmasanız dahi tetikleyici oluşturuken karşılaşabilirsiniz. Bu durumda en iyi çözüm sütun ismini değiştirmek olacaktır.


Bu yazı toplam 1368 defa görüntülenmiştir.