Sequence mantığı hemen hemen tüm ilişkisel veritabanlarında aynıdır ve bir birine benzer mekanizmayı esas alarak çalışır. Çalışma mantığı gereği de bir değere eşitlenmesi çalışma ters olduğu için hemen hemen tüm veritabanları belirli bir değere eşitleme mekanizması içermez.
Sequence mevcut değeri değiştirmek için kullanılan alternatif yöntemler vardır. Bunlardan en bilineni sequence'de bir sonraki değeri defalarca sorgulayarak sayısını artırmaktır. Ama örneğin 1000 değerinden 100000 değerine kadar bu işlemi yapmak maalesef imkansızdır. Bunun için alternatif diğer yöntem ise sequence artım değerini yükseltmek ve sequence istenilen değere gelene kadar bir sonraki değeri sorgulayıp en son terkar artım değerini bir yapmaktır.
Oracle da bize sequnce'i mevcut bir değerden başlatmak gibi bir olanak sunmaz. (Aslında sequence oluştururken bunu yapabiliyorsunuz. Ama burada kastettiğimiz var olan sequece'yi belirli bir değere yükseltmektir) Bunun için bu makalede sequence artım değerini yükselterek belirli bir değere getirip ondan sonra artım değerini bire eşitleyebileceğimiz sorguları size anlatacağım.
Konuyu daha iyi anlatabilmek açısından çokça karşılaşılan örnek bir senaryo ile başlayalım ve problemin ne olduğunu tam olarak ortaya koyarak problemi çözelim.
Örneğin bir tablo, ona uygun sequence oluşturdunuz. Ama tabloya değerleri sql sorgu ise değil de bir excel tablosundan insert ettiniz. Bu da doğal olarak sequence değerinin eski kalmasına ve tabloya doğal olarak yeni verilere yazamayacağınız anlamına gelecektir.
Öncelikle oracle'da sequence artım (increment) değerini yükseltmek için sorguyu yazalım.
Sorguda my_sequence isimli sequence'mizin artım değerini 1000 olarak belirliyoruz.
ALTER SEQUENCE my_sequence INCREMENT BY 1000;
Bir sonraki sorgumuzda nextval metodu ile sequence'den sorgulamalar yaparak istediğimiz değere yaklaşıncaya kadar sorguyu çalıştırıyoruz.
SELECT my_sequence.nextval FROM dual;
İstenilen değere gelene kadar sorgulama yaptıktan sonra artım değerini tekrar 1 olacak sorguyu yazıyoruz.
ALTER SEQUENCE my_sequence INCREMENT BY 1;
İsterseniz tekrar nextval metodunu çalıştırarak istediğiniz değere tam olarak getirebilirsiniz.
Küçük not: Tablolarda sequence bağlı değeri hangi değere eşitlemeniz gerektiğini bilmiyorsan MAX metodunu kullanarak o kolonun maksimum değerini bularak sequence'yi o değerden daha büyük bir değere eşitlemeniz daha doğrudur.
Bir Not daha: Bazı kişiler geliştiriciler fantazi olsun diye artım değerini -1 yaparak öneğin ID değerini giderek küçültürler. Bu sorguları artım değerini eksi yaparak da işlem yapabilirler. Yani eksi değerler de artım değeri olarak kullanılabilir ve aynı süreçler bu durum için de geçerlidir.
Yorumlar
Yorum Gönder