Etiket arşivi: auto increment column

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..