티스토리 뷰

DB/Oracle

Oracle Sequence란

Tomining 2015. 3. 16. 12:22
1.  시퀀스란 
오라클에서는  행을  구분하기  위해서  기본  키를  두고  있습니다.  
기본  키는  중복된  값을  가질  수  있으므로  항상  유일한  값을  가져야  합니다. 
기본  키가  유일한  값을  갖도록  사용자가  직접  값을  생성해내려면  부담이  큽니다. 

시퀀스는  테이블  내의  유일한  숫자를  자동으로  생성하는  자동  번호  발생기  이므로 
시퀀스를  기본  키로  사용하게  되면  사용자의  부담을  줄일  수  있습니다. 


CREATE  SEQUENCE  sequence_name 
   [  INCREMENT  BY  n  ] 
   [  START  WITH  ] 
   [  {MAXVALUE  n  |  NOMAXVALUE}  ] 
   [  {MINVALUE  n  |  NOMINVALUE}  ] 
   [  {CYCLE|  NOCYCLE}  ] 
   [  {CACHE  n  |  NOCACHE}  ]; 

1)  INCREMENT  BY  옵션 
연속적인  시퀀스  번호의  증가치를  지정할  때  사용됩니다. 
만약  1씩  증가하는  시퀀스를  생성하려면  increment  by  1  이라고  지정해주면  됩니다. 

2)  START  WITH  옵션 
시퀀스  번호의  시작  값을  지정할  때  사용됩니다.  만일  1부터  시작되는  시퀀스를  생성하려면 
start  with  1  로  지정해주면  됩니다. 

3)  MAXVALUE  옵션 
시퀀스가  가질  수  있는  최대값을  지정합니다. 
nomaxvalue  를  지정하면  ascending  순서일  경우에는  10^27  승이고, 
descending  순서일  경우에는  -1  로  설정됩니다. 

4)  MINVALUE  옵션 
시퀀스가  가질  수  있는  최소값을  지정합니다. 
nominvalue  를  지정하면  ascending  순서일  경우에는  1이고 
descending  순서일  경우에는  10^26  승이  설정됩니다. 

5)  CYCLE  옵션 
지정된  시퀀스  값이  최대값까지  증가가  완료되게  되면  다시  start  with  옵션에  지정한  
시작  값에서  다시  시퀀스를  시작하도록  합니다. 
nocycle  은  증가가  완료되게  되면  에러를  유발시킵니다. 

6)  CACHE  옵션 
메모리상의  시퀀스  값을  관리하도록  하는    것인데  기본  값은  20입니다. 
nocache는  원칙적으로  메모리  상에서  시퀀스를  관리하지  않습니다. 



부서번호를  자동으로  부여해주는  시퀀스  객체를  생성 
create  sequence  detp_deptno_seq 
increment  by  10 
start  with  10; 



2.  CURRVAL  과  NEXTVAL  의  사용 
시퀀스의  현재  값을  알아내기  위해  currval  을  사용하고,  다음  값을  알아내기  위해  nextval을  사용합니다. 

currval에  새로운  값을  할당하기  위해서는  nextval로  새로운  값을  생성해야  합니다. 

select  dept_deptno_seq.nextval  from  dual; 

select  dept_deptno_seq.currval  from  dual; 



create  sequence  sample_seq; 

select  sample_seq.nextval  from  dual; 
select  sample_seq.currval  from  dual; 




3.  시퀀스의  수정과  제거 

alter  sequence  dept_deptno_seq 
maxvalue  50; 

select  dept_deptno_seq.currval  from  dual; 
select  dept_deptno_seq.nextval  from  dual; 
select  dept_deptno_seq.currval  from  dual; 

nextval를  할당하다  보면  50까지만  할당하고  그  이상은  오류를  발생합니다. 



시퀀스의  제거 
drop  sequence  sample_seq; 
drop  sequence  dept_deptno_seq; 




4.  시퀀스의  실무  적용 
99.9%  insert  연산과  같이  사용되어  컬럼  값을  자동으로  발생시키는  용도로  사용됩니다. 


create  table  dept15 
      detpno  NUMBER(4)  PRIMARY  KEY, 
      dname    VARCHAR2(25), 
      loc        VARCHAR2(30) 
); 



desc  dept15; 


create  sequence  dept_deptno_seq 
increment  by  10 
start  with  10 
nocycle; 



insert  into  dept15  values  (dept_deptno_seq.nextval,  'test1',  'location1'); 
insert  into  dept15  values  (dept_deptno_seq.nextval,  'test2',  'location2'); 
insert  into  dept15  values  (dept_deptno_seq.nextval,  'test3',  'location3'); 
insert  into  dept15  values  (dept_deptno_seq.nextval,  'test4',  'location4'); 


select  *  from  dept15;
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함