oracle auto-increment sorunsalı

Oracle ile tek taraflı sevişme olayım devam etmekte ve her gün "ohaaa!", "hadi canımmm!" şeklindeki nidalarım ofisin çeşitli noktalarından duyulmakta.
Bu tepkiye neden olan olaylardan birisi de geçenlerde oracle da bir tablodan data silmek için uniqe ve auto-incerement bir id'ye ihtiyaç duymamdı.
Bunu database yöneticimize söylediğimde oracle tablolarında auto-increment bir yapının bulunmadığını öğrendim. Bunun yerine sequences denen hede'nin bulunmakta. Bu arkadaş kendini tekrar etmeyen, unique ve auto-increment id'ler üretmekte. İlk olarak sqldeveloper'ın ilgili shema altında sequence kısmından bir sequences tablosu oluşturuyorsun. Başlangıç ve artış değerlerini vermeye dikkat edin. Insert ya da update işlemlerinde RESERVE_SEQ.NEXTVAL (sequences tablosunun ismi RESERVE_SEQ olsun) şeklinde havuzdan sıradaki id'yi çekiyorsun ve gerekli işlemleri yapıyorsun.

insert için örnek :

INSERT INTO TABLO (ID,KELIME) VALUES(RESERVE_SEQ.NEXTVAL,'$Kelime');

update için örnek :

UPDATE TABLO SET ID=RESERVE_SEQ.NEXTVAL WHERE ID='$Id';

1 Comment so far

  1. gökhan on Mayıs 28th, 2009

    ID=RESERVE_SEQ.NEXTVAL yerine bir trigger da yazabiliriz aslında.

    CREATE OR REPLACE TRIGGER reserve_trigger
    BEFORE INSERT
    ON reserve
    REFERENCING NEW AS NEW
    FOR EACH ROW
    BEGIN
    SELECT reserve_sequence.nextval INTO :NEW.ID FROM dual;
    END;

    yukarıdaki trigger ile insert cümlelerini şu şekilde değiştirebilirsin

    INSERT INTO TABLO (KELIME) VALUES('Ali');
    INSERT INTO TABLO (KELIME) VALUES('Veli');
    INSERT INTO TABLO (KELIME) VALUES('Can');

    ID KELIME
    --------------
    1 Ali
    2 Veli
    3 Can

Leave a reply