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';
Comments(1)
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