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