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

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

Oracle’da artan veya azalan sıralı numerik değerler oluşturmaya yarayan nesnelerdir.
MsSQL de identity kolonu bu işi otomatik yapar, ama oracle’da daha bu özellik yoktur.
Bir tablonun Primary key sütununa sıralı ve unique değerler insert etmek için kullanabiliriz.Sekansların diğer database objeleriyle bir ilişkisi yoktur.Data dictionary’de tutulurlar.

SQL> CREATE SEQUENCE PERSON_ID_SEQ
START WITH 1
INCREMENT BY 1
MINVALUE 1
MAXVALUE 9999999999999
NOCACHE
NOCYCLE
NOORDER;

PERSON_ID_SEQ adında bir Sekans oluşturdum, detaylarını incelersek;

START WITH : Sekansın kaçtan başlamasını istiyorsak belirtiriz.Defaultu 1’dir.

INCREMENT BY : Sekansınızın kaçar kaçar artacağını ve azalacağını belirtir.
+1 değerini verirseniz Sekansınız birer birer artacaktır.
-3 değerini verirseniz Sekansınız üçer üçer azalacaktır.

MINVALUE : Azalarak giden sekansın gidebileceği son değeri belirtir.

MAXVALUE : Artarak giden sekansın gidebileceği son değeri belirtir.

CYCLE : Sınıra ulaşan sekansın tekrar yeniden başlamasını belirtir.

NOCYCLE : Sekanslar default olarak NOCYCLE yaratılır.

CACHE : Sistemde bir hata olunca cachede tutulan ve kaybolan numaraları tekrar kullanmak istiyorsak.

NOCACHE : Sürekli güncel numarayı üretir,sekansın performansı düşüktür.Ama üretilen sayılar arasında
kopukluk yoktur.

NEXTVAL:
Sekansın sıradaki değeri üretmesi sağlanır.Ve her select ettiğinizde değeri değişir.

SQL> SELECT PERSON_ID_SEQ.nextval FROM dual;
3
SQL> SELECT PERSON_ID_SEQ.nextval FROM dual;
4
SQL> SELECT PERSON_ID_SEQ.nextval FROM dual;
5

CURRVAL:
Sekansın sıradaki değerini gösterir.Select çektiğinizde değeri aynı kalır..

SQL> SELECT PERSON_ID_SEQ.currval FROM dual;
5
SQL> SELECT PERSON_ID_SEQ.currval FROM dual;
5
SQL> SELECT PERSON_ID_SEQ.currval FROM dual;
5

Sekansı tabloya insert için kullanalım..

SQL> CREATE TABLE deneme_emp_tab (
emp_id NUMBER PRIMARY KEY,
Ad VARCHAR2(100),
soyad VARCHAR2(100),
dogum_tarihi DATE );

Tablomuza kayıt atalım.

SQL> INSERT INTO deneme_emp_tab
VALUES(PERSON_ID_SEQ.nextval,’Ömer’,’Acar’,SYSDATE);

SQL> INSERT INTO deneme_emp_tab
VALUES(PERSON_ID_SEQ.nextval,’Ayse’,’Demir’,SYSDATE);

SQL> INSERT INTO deneme_emp_tab
VALUES(PERSON_ID_SEQ.nextval,’John’,’Bellick’,SYSDATE);
SQL> COMMIT;

SQL> SELECT * FROM DENEME_EMP_TAB t;

8 Ömer Acar 28/11/2012 21:20:41
9 Ayse Demir 28/11/2012 21:20:54
10 John Bellick 28/11/2012 21:20:59

Sekansı Drop Etmek:
SQL> DROP SEQUENCE PERSON_ID_SEQ;

Güncelleme:
Oracle 12C’de auto increment kolon tipi geldi.Onu farklı bir makalede yazacağım..

Tagged: , , , , , ,

Comments: 2

  1. baki 9 Eylül 2015 at 14:44 Reply

    Teşekkürler. Çok güzel bir paylaşım. nextval ile gelen sonucu nasıl değişkene alacağımızın bir örneği de olsaydı çok güzel olurdu 🙂

    • Ömer ACAR 9 Eylül 2015 at 15:36 Reply

      Baki bey merhaba, aşağıdaki gibi sequence değerini bir değişkene atayabilirsiniz.
      Anonymous block üzerinde gösterdim ama aynı şekilde procedure ve fonksiyon içinde de kullanılabilir.

      DECLARE
      seq_value_ NUMBER;
      BEGIN
      –Sequence in degerini seq_value_ ye atıyoruz..
      SELECT PERSON_ID_SEQ.nextval INTO seq_value_ FROM dual;
      — Degeri ekrana bastırıyoruz. ya da baska işlemler için kullanabiliriz.
      dbms_output.put_line(‘Sequence in degeri = ‘||seq_value_);
      END;

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir