Oracle Ders 9 – Sequence

Merhaba Arkadaslar,
Bu dersimizde Oracle DB de sequence kavramindan bahsedecegim.
Sequence(birbiri ardindan gelme), Oracle DB nin , tablomuzdaki genellikle primary key icin otomatik olarak deger uretmesini saglar.

Sequence Olusturma

CREATE SEQUENCE sequencename
[INCREMENT BY value]
[START WITH value]
[{MAXVALUE value | NOMAXVALUE}]
[{MINVALUE value | NOMINVALUE}]
[{CYCLE | NOCYCLE}]
[{ORDER | NOORDER}]
[{CACHE value | NOCACHE}];

Buradaki kavramlari tek tek isleyecegiz.

increment by value  , olusturulan ardisik iki sayi arasindaki fark value kadardir. (increment by 5)

start with value
, sequence mizin baslayacagi deger.  (start with 100)
Baslangic degerine dikkat etmek gerekmektedir, ornegin tablomuzda 1-1000 arasi kayit oldugunu dusunelim, eger baslangic degerimizi bu 2 deger arasinda olursa , Oracle DB hata verecektir.

minvalue ve maxvalue , sequence icin minimum ve maksimum deger belirlenmesini saglar.
Eger sequence , artisi pozitif yonluyse burada minvalue yerine maxvalue kullanmak gerekir.
Default(varsayilan) olarak Oracle 11 g , nominvalue ve nomaxvalue degerini kullanir.
En dusuk deger -10^26 , en buyuk deger ise 10^26 dir.

Cycle ve NoCycle kavramlarina gelecek olursak, eger sequence minvalue veya maxvalue degerlerine ulasilmissa ve sequence te Cycle belirtilmisse, bir sonraki deger icin sequencimiz yeni sayi uretmek icin bastan baslayacaktir. Tersi durumda ise sequence bastan baslamayacaktir. Varsayilan olarak NoCycle dir.

Order ve NoOrder , cok fazla kullanicinin ayni anda islem yaptigini ve sequence degeri isteginde bulundugunu dusunelim, bu durumda Order sayesinde Oracle 11 G , tum isteklerin alinma sirasina gore ayni sirada bir sequence degeri dondurecektir.

NoCache ve Cache, ,yogun bir sekilde sequence degeri uretmek yavasliga neden olabilir. Cache secenegi kullanilirsa, Oracle 11 G belirtilen kadar sequence degeri olusturur ve hafizada saklar. Kullanici bir sequence degerine ihtiyac duydugunda , tekrar sequence degeri olusturmak yerine hafizadaki deger verilir. Oracle 11 G icin varsayilan olan Cache secenegi Cache 20 dir, bunun anlami anlasildigi uzere 20 tane degeri hafizada otomatik olarak tutmasidir.
Hafizaya alinan bu degerlerin tamami kullanilmadan yeni bir degerler grubu hafizaya alinmayacaktir. Cache 20 ise, tum 20 deger kullanilir ve sonra yeni bir 20 deger hafizaya alinir. Sistem de bir problem olursa veya bir sekilde bu degerler kaybolursa ,bir sonraki cache alinan degerler ile mevcut degerler arasinda fark olacaktir, bu da sirali bir sekilde gitmemesine neden olur.

Sequence ler ozel olarak bir alana veya tabloya atanmamistir, bunlar bagimsiz bir objedir. Bu nedenler birden fazla kullanici farkli tablolar icin ayni sequence objesini kullanabilir.Bu durum tabiki tablolarda degerler arasinda bosluga neden olacaktir.

Her sey sirali gitsin diyorsak, sequence i tek tablo icin ve nocache secenegi ile kullanmak yerinde olacaktir 🙂

Yazdiklarimizi uygulamaya gecirmeye calisalim, oncelikle bu dersimiz icin yeni bir tablo olusturalim..

create table ders9 (
id number,
fname varchar2(20),
lname varchar2(20)
);

Simdi yeni bir sequence olusturalim,

create sequence ders9_id_seq
increment by 5
start with 10
nocycle
nocache;

Olusturdugumuz sequence objelerini su sorgu ile gorebiliriz. Ya da SQL developer programimizda resimde goruldugu gibi mevcut sequencelerimizi gorebiliriz.

oracle_der9_01

select object_name from user_objects where object_type= 'SEQUENCE';

user_objects tablosu tum tablolar icin sequence,index,views gibi bilgileri tutmaktadir.

Sequence Degerlerin Kullanimi

Tablomuzu ve Sequence objemizi olusturduk sirada bunlarin kullanimi var. Bunun icin nextval ve currvall  i kullaniriz. nextval adi uzerinde next-value yani bir sonraki degerdir. Uygun bir sonraki degerin kullanimidir. currvall ise currentvalue anlamina gelmektedir, yani elimizdeki mevcut degeri tekrar kullanabilmemizi saglar.

insert into ders9 values (ders9_id_seq.nextval,'Levent','Erguder');
insert into ders9 values (ders9_id_seq.nextval,'Cagri','Cetin');
insert into ders9 values (ders9_id_seq.nextval,'Ozkan','Ozbas');
insert into ders9 values (ders9_id_seq.currval,'Burak','Okumus');
insert into ders9 values (ders9_id_seq.nextval,'Recep','Bostanci');

5 adet kayit ekledik ve tablomuza bakalim..

oracle_der9_02

Gordugunuz gibi tablomuzda id alani 10 dan basladi, (sequence te belirtigimiz start with 10 degerinde belirttigimiz gibi ) artisimiz 5 er 5 er oldu (increment by 5 ) ve nextval uygun olan bir sonraki degeri getirdi,  currvall degeri ile ayni degeri tekrar kullandik.

Sequence e Alter Uygulamak

Daha once gordugumuz alter komutu ile sequence imizde degisiklikler yapabiliriz. start with degerinde bir degisiklik yapamayiz ve bir de ornegin suanki sequence degerimi 100 biz maxvalue degerimizi 50 yapamayiz.

alter sequence ders9_id_seq
increment by 10
maxvalue 40
cycle;

sequence imizi basariyla degistirdik.Simdi bir kac kayit daha ekleyelim ve sonuclari gorelim.

insert into ders9 values (ders9_id_seq.nextval,'James','Gosling'); 
insert into ders9 values (ders9_id_seq.nextval,'Rod ','Johnson');
insert into ders9 values (ders9_id_seq.nextval,'Joshua ','Bloch');

sequence imizde artis miktarini 10 yapmistik, ve maxvalue degerini 40 olarak degistirmistik son olarak da cycle secenegini aktif etmistik.
Son degerimiz 25 di bir sonraki kayit icin 35 oldu ve bir sonraki deger 45 olacagi icin ve maxvalue degeri 40 oldugu icin hata verecekti ama biz cycle secenegini aktif ettigimiz icin basa sardi ve 1 degerini aldi,  bundan sonraki kayitta ise 10 ar 10 ar artisa devam edecektir ve 11 olacaktir.

oracle_der9_03

Bir sonraki sequence degerini degerini su sekilde gorebiliriz.

select ders9_id_seq .nextval from dual;


oracle_der9_04

Sequence i Silme Islemi

Bunun icin basitce su genel formdan yararlanilabilir.

drop sequence sequencename;

Bu dersimize burada son veriyorum.

Herkese Bol Javali Gunler dilerim.
Be an oracle man , import java.*;
Levent Erguder
injavawetrust

Print Friendly, PDF & Email

Leave a Reply

Your email address will not be published. Required fields are marked *