19 Ekim 2015 Pazartesi

Oracle Sequence nedir, nasıl kullanılır?


         Oracle  Sequence nedir, nasıl kullanılır?


Sequence:Oracle'da artan veya azalan sıralı nümerik değerler kullanılmasını sağlar

Sequence yapısının genel hali

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

bu şekildedir
nasıl tablo oluştururken create table kullanıyorsak bu yapıdada create sequence syntaxi ile yazılır.
START WITH:Sequence in başlangıç değerini belirler. default u 1dir.
INCREMENT BY : Sequence in artış miktarını belirler. +1, +2, +3 sırasıyla 1er 1er 2şer 2şer 3er 3er artar. Peki azaltmakta mümkün demiştik bunu nasıl yapıcağız derseniz tam tersi -1, -2, -3 sırasıyla 1er 2şer 3er azalır.
MAXVALUE         : Artan Sequence in en yüksek değerini belirler
NOMAXVALUE    : Artan Sequence in maksimum bir değerinin olmadığını belirler
MINVALUE:Azalan Sequence in minimum değerini belirler
NOMINVALUE :
CYCLE : Sequence in maksimum değere ulaştıktan sonra start with değerine geri dönmesini sağlar
NOCYCLE: NOCYCLE ise CYCLE özelliğinin kapatır.
CACHE: Bir hata meydana gelince cachede tutulan değerleri tekrar kullanmak istersek CACHE olarak belirtiriz
NOCACHE: CACHE özelliğini kapatır
ORDER:
NOORDER


HR şemasında ornekemp tablosu oluşturup (empid, fname, lname,sal) kolonlarını oluşturup içinede employees tablosunda bu değerlere karşılık gelen kolonların verilerini atalım.
yani
create table ornekemp ( empid number(6) constraint emp_id_pk primary key,
                        fname varchar2(25) ,
                        lname varchar2(25) not null,
                        sal number(8,2));
tablomuza select çektiğimizde
select * from ornekemp order by empid desc;
eğer daha önce hiç bir insert yapmadıysak en üstte William ı görmüşsünüzdür.206 William ın empid si ve unique.
206    William    Gietz    8300

bir sequence düşünelim ismi ornek_empid_seq olsun ve 207 den başlasın birer birer artsın maksimum değeri 999999, cycle özelliği olmasın. E hadi yapalım


create sequence ornek_empid_seq
                start with 207
                increment by 1
                maxvalue 999999
                nocache
                nocycle;

Evet sequence imiz oluşmuştur. isterseniz sequenceimizin oluşup oluşmadığını kontrol edelim
select * from user_sequences where sequence_name='ornek_empid_seq';
sorgusunu çalıştırıyoruz. Eğer herşey yolunda gittiyse SEQUENCE_NAME kolonunda kendi yazdığımız sequence imizi görebiliriz ve tabikide diğer kolonlarda sequence imizin özelliklerini ve hatta hangi nümerik değerde kaldığını last_sequence kolonundan görmeniz mümkün.

ve sırada insert deyimi ile veriler eklerken sequence imizin nasıl çalıştığını görelim.

insert into ornekemp (ornek_empid_seq.nextval,'Uğur','Güveç',4500);
çalıştırdığımızda
1 rows inserted sonucunu görürseniz büyük ihtimal herşey yolundadır peki bunu nasıl anlarız ? tabikide select çekeceğiz
select * from ornekemp order by empid desc;
ve gördüğünüz üzere William ilk sıradaydı şu anda Uğur un empid si 207 şeklinde atanmış oldu. Burada .nextval ile empid değerini bir artırıp paranteze yazdırmış olduk
207    Uğur    Güveç    4500

peki bu oluşturduğumuz  ornek_empid_seq adındaki sequence ı nasıl düzenleyebiliriz?
artış değerini 10 max değerinide 9999 yapalım
alter sequence ornek_empid_seq
               increment by 20
               maxvalue 9999;
tekrar bir değer insert edip select çektiğinizde  227 empidsi ile bir kullanıcı eklediğinizi göreceksiniz. Not: start with değerini alter edemezsiniz.
Peki bu oluşturduğumuz Sequence i nasıl silebiliriz?
drop sequence ornek_empid_seq;
sorgusunu F5 ile çalıştırdığımızda sequence ornek_empid_seq dropped. çıktısını aşağıda göreceksiniz.

Hiç yorum yok:

Yorum Gönder