sequence etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
sequence etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

ORACLE SEQUENCE(OTOMATIK SAYI)

Oracle da access yada Ms sql dekine benzer otomatik arttırma diye birşey yoktur.Bunu yapmak için siz kendiniz sequences yaratmalısınız.

CREATE SEQUENCE sequence_name
MINVALUE value
MAXVALUE value
START WITH value
INCREMENT BY value
CACHE value;

Örneğin:

CREATE SEQUENCE supplier_seq
MINVALUE 1
MAXVALUE 999999999999999999999999999
START WITH 1
INCREMENT BY 1
CACHE 20;

Burada MINVALUE en küçük MAXVALUE en büyük değer koşuludur.MAXVALUE zorunlu değildir.Atanmazsa varsayılan olarak 999999999999999999999999999 değerini alır.START WITH başlangıç değerini INCREMENT BY her seferinde ne kadarlık bir değer artışı olacağını gösterir.CACHE ise sequnece işleminin performans açısından daha hızlı olması için bellekte tutulacak değerdir.NOCACHE bellekte tutulmayacağı demektir.Sequencesin bir sonraki değerine ulaşmak için sequence_name.nextval ile erişilebilir.

INSERT INTO musteriler
(musteri_id, musteri_name)
VALUES
(supplier_seq.nextval, ‘Ali Çetinkaya’);

Normalde değerler Increment By da belirtilen kadar artar mesela diyelim ki bu değer 1 olsun ve son kullanılan değer 100 olsun. Biz bir sonraki insert işleminde 255 atamak istiyorsan Alter ifadesi ile sequence i değiştirmemiz gerekir.

alter sequence seq_name
increment by 124;

select seq_name.nextval from dual;

alter sequence seq_name
increment by 1;

Böylece bir sonraki değer 255 olacak ve sonra yine 1 artacaktır.
spacer

SEQUENCE'DE CYCLE KULLANIMI

Merhaba,

Daha önce sequence in ne olduğuna bakmıştık.Kısaca hatırlayacak olursak oracle db de tablolar için unique alan istiyorsak otomatik sayı üretimi için sequence kullanılır.Sequence başlangıç değerinden başlar ve bitiş değerine kadar gider.Her sequence çalıştırıldığı zaman son olan değer artması gereken değer kadar arttırılır.Normalde cycle kullanmadan bir sequence yaratalım ve daha sonra cycle kullanarak bir sequence yaratalım böylece sequence de cycle kullanımını daha iyi anlamış oluruz.

create sequence normal_sequence
minvalue 1
maxvalue 7
start with 1
increment by 1
cache 20;

Şimdi bu sequenci çalıştıralım.

select normal_sequence.nextval from dual;

bu sorguyu her çalıştırdığımızda sırayla 1,2,3,4,5,6,7 değerlerini alırız.Fakat 8.çalıştırdığımız zaman sequence için bir sonraki değer 8 olmuş olur ve maxvalue değeri olan 7 aşılmış olur.Bu durumda oracle “ORA-08004: sequence NORMAL_SEQUENCE.NEXTVAL exceeds MAXVALUE and cannot be instantiated” diye hata verecektir.

Aynı sequence i cycle ile yeni isimde create edelim.

create sequence cycle_sequence
minvalue 1
maxvalue 7
start with 1
increment by 1
cache 6
cycle;

Şimdi bu sequence i çalıştıralım.

select cycle_sequence.nextval from dual;

ilk 7 değer için diğer sequence ile aynı değerleri üretecektir.Yani 1,2,3,4,5,6,7 fakat 8. çalıştırığımız zaman hata vermeyecek ve yeniden sequence başa dönüp 1 değerini üretecektir.Burada dikkat edilmesi gereken bir diğer nokta cycle kullanıldığı sequence de cache değeri bir döngü değerinden küçük olmalıdır.
spacer