½ÃÄö½º(SEQUENCE)

½ÃÄö½º¶õ ±âÁ¸ÀÇ Å×ÀÌºí¿¡ ´ëÇØ ±âº»Å°³ª À¯´ÏÅ© ۸¦ »ç¿ëÇÏ¿© ºÎ°¡ÇÏ´Â ÀÏÁ¾ÀÇ »õ·Î¿î Ä÷³Ã³·³ »ç¿ëÇÒ ¼ö ÀÖ´Â ÀϷùøÈ£¸¦ ¸Å±èÇϱâ À§ÇÑ ÇϳªÀÇ Ä÷³À¸·Î ±¸¼ºµÈ Å×À̺í°ú °°´Ù.
• ½ÃÄö½º¶ó´Â °´Ã¼ ½º½º·Î¸¸ »ç¿ëÇÒ Àǹ̰¡ ¾øÀ¸¸ç, ±âÁ¸ÀÇ Å×À̺í°ú ¿¬°èÇØ¼­ »ç¿ëÇÏ°Ô µÈ´Ù.

½ÃÄö½ºÀÇ °³³ä

scott.dept Å×À̺íÀÇ deptno ÇàÀ» º¸¸é ÀÏ·ÃÀÇ ¼ýÀÚ·Î ÀÌ·ç¾îÁø °ÍÀ» ¾Ë ¼ö ÀÖ´Ù. ½ÃÄö½º°¡ ±×·¯ÇÑ ¿ªÇÒÀ» Çϴµ¥ Áï, Å×À̺íÀÇ Çà¿¡ À¯ÀÏÇÑ Á¤¼ö¸¦ ºÎ¿©ÇÔÀ¸·Î½á ±âº»Å°(primary key) °ªÀ» »ý¼ºÇÏ´Â °´Ã¼ÀÌ´Ù
• ½ÃÄö½º´Â Oracle server¿¡ ÀÇÇØ ÀÚµ¿À¸·Î ¹ß»ýÇϰí Áõ°¡ ¶Ç´Â °¨¼ÒµÈ´Ù.
• Å×ÀÌºí¿¡ µ¶¸³ÀûÀ¸·Î Àû¿ëµÇ±â ¶§¹®¿¡ ´Ù¾çÇÑ »ç¿ëÀÚÀÇ Á¢±ÙÀÌ °¡´ÉÇÏ´Ù.

½ÃÄö½ºÀÇ Æ¯Â¡

• À¯ÀÏÇÑ ¿¬¼Ó¹øÈ£¸¦ ÀÚµ¿À¸·Î »ý¼º
• ±âº»Å°°ª »ý¼ºÀ» À§ÇØ »ç¿ë
• Application Code¸¦ ´ëä
• ¸Þ¸ð¸®¿¡ CacheµÇ¾î access È¿À²¼ºÀ» Áõ°¡
• ½ÃÄö½º´Â ¿©·¯ Å×ÀÌºí¿¡ ÀÇÇØ °øÀ¯µÉ ¼ö ÀÖ´Ù.

½ÃÄö½ºÀÇ »ý¼º

´Ù¸¥ °´Ã¼ÀÇ »ý¼º°ú ¸¶Âù°¡Áö·Î create ¹®À» »ç¿ëÇÑ´Ù. ¿É¼ÇÀÌ ´Ù¾çÇϹǷΠ°¢ ¿É¼ÇÀÇ ¼ø¼­¿Í ¿É¼Ç »ý·«½ÃÀÇ µðÆúÆ® °ªÀ» ¾Ë¾Æ µÑ Çʿ䰡 ÀÖ´Ù.

¡¼Çü½Ä¡½
	CREATE SEQUENCE ½ÃÄö½º¸í
	[ INCREMENT BY Á¤¼ö]
	[ START WITH Á¤¼ö]
	[ MAXVALUE n ¦ NOMAXVALUE]
	[ MINVALUE n ¦ NOMINVALUE]
	[ CYCLE ¦ NOCYCLE]
	[ CACHE n ¦ NOCACHE];

¿É¼Ç¼³¸í
INCREMENT BY Á¤¼ö½ÃÄö½º ¹øÈ£¸¦ Á¤¼ö¸¸Å­¾¿ Áõ°¡(µðÆúÆ®=1)
START WITH Á¤¼ö½ÃÀÛ°ªÀ» ÁöÁ¤(µðÆúÆ®=1) cycle ¿É¼ÇÀ» »ç¿ëÇÑ °æ¿ì ´Ù½Ã °ªÀ» »ý¼ºÇÒ ¶§ minvalue¿¡ ¼³Á¤ÇÑ °ªºÎÅÍ ½ÃÀÛ
MAXVALUE Á¤¼öÁõ°¡ÇÒ ¼ö ÀÖ´Â ÃÖ´ë°ª
NOMAXVALUE(default)½ÃÄö½ºÀÇ ÃÖ´ë°ªÀÌ ¾øÀ½À» Á¤ÀÇ, ¿À¸§Â÷¼øÀº 10^27±îÁö Ä¿Áú ¼ö ÀÖ°í, ³»¸²Â÷¼øÀ¸·Î 1±îÁö ÀÛ¾ÆÁú ¼ö ÀÖÀ½
MINVALUE Á¤¼ö»ý¼ºÇÒ ¼ö ÀÖ´Â ÃÖ¼Ò°ª
NOMINVALUE(default)½ÃÄö½ºÀÇ ÃÖ¼Ò°ªÀÌ ¾øÀ½À» Á¤ÀÇ, ¿À¸§Â÷¼øÀº ÃÖ¼Ò 1±îÁö, ³»¸²Â÷¼øÀ¸·Î -(10^26)±îÁö °£´Ù.
CYCLEÃÖ´ë ¶Ç´Â ÃÖ¼Ò°ª¿¡ µµ´ÞÇÑ ÈÄ °ªÀ» ´Ù½Ã »ý¼º
NOCYCLE(default)ÃÖ´ë ¶Ç´Â ÃÖ¼Ò°ª¿¡ µµ´ÞÇÑ ÈÄ °ªÀ» ´Ù½Ã Àç½ÃÀÛÇÒ ¼ö ¾øÀ½
CACHEºü¸¥ access¸¦ À§ÇØ ½ÃÄö½ºÀÇ °ªÀ» ¸Þ¸ð¸®¿¡ ÀúÀå(±âº» 20)
NOCACHE¾î¶² ½ÃÄö½º°ªµµ ij½ÌµÇÁö ¾ÊÀ½

¡¼¿¹Á¦¡½
SQL> create sequence dept_deptno
  2  increment by 10
  3  start with 50
  4  maxvalue 10000
  5  nocache
  6  nocycle;
 
½ÃÄö½º°¡ »ý¼ºµÇ¾ú½À´Ï´Ù.
 
SQL> 
Pseudo Ä÷³À» ÀÌ¿ëÇÑ ½ÃÄö½ºÀÇ »ç¿ë

sequence´Â currval°ú nextvalÀ̶ó´Â pseudo Ä÷³À» »ç¿ëÇÏ¿© °ªÀ» ¸®ÅÏÇÑ´Ù.
CURRVALÀÌ ÂüÁ¶µÇ±â Àü¿¡ NEXTVALÀÌ ¸ÕÀú »ç¿ëµÇ¾î¾ß ÇÑ´Ù. ÀÌ´Â pseudo Ä÷³ÀÇ CURRVALÀÇ °ªÀº NEXTVAL Ä÷³ °ªÀ» ÂüÁ¶Çϱ⠶§¹®ÀÌ´Ù. ±×·¯¹Ç·Î NEXTVAL Ä÷³ÀÌ »ç¿ëµÇÁö ¾ÊÀº »óÅ¿¡¼­ CURRVALÀ» »ç¿ëÇÏ¸é ¾Æ¹«·± °ªÀÌ ¾ø±â ¶§¹®¿¡ error¸¦ Ãâ·ÂÇÑ´Ù.

Pseudo column»ç¿ëÇü½Ä¼³¸í
NEXTVAL½ÃÄö½º¸í.NEXTVAL»õ·Î ÀÛ¼ºµÈ ½ÃÄö½ºÀÇ ´ÙÀ½ °ªÀ» ¹Ýȯ
CURRVAL½ÃÄö½º¸í.CURRVAL»õ·Î ÀÛ¼ºµÈ ½ÃÄö½ºÀÇ ÇöÀç °ªÀ» ¹Ýȯ

À¯ÀÇ»çÇ×

1)NEXTVAL°ú CURRVALÀ» »ç¿ëÇÒ ¼ö ÀÖ´Â °æ¿ì
- subquery°¡ ¾Æ´Ñ SELECT ¹®
- INSERT ¹®ÀÇ DML SELECT ¹®
- INSERT ¹®ÀÇ DML VALUES Àý
- UPDATE ¹®ÀÇ SET Àý

2)NEXTVAL°ú CURRVALÀ» »ç¿ëÇÒ ¼ö ¾ø´Â °æ¿ì
- VIEW ¹®ÀÇ SELECT ¹®
- DISTINCT Ű¿öµå¸¦ »ç¿ëÇÑ SELECT ¹®
- GROUP BY, AVING, ORDER BY¸¦ ÀÌ¿ëÇÑ SELECT ¹®
- SELECT, DELETE, UPDATE ¹®¿¡¼­ÀÇ subquery
- CREATE TABLE, ALTER TABLE ¸í·É¹®ÀÇ DEFAULT Àý

¡¼¿¹Á¦¡½
SQL> CREATE SEQUENCE dept_deptno
  2  INCREMENT BY 10
  3  START WITH 50
  4  MAXVALUE 10000
  5  NOCACHE
  6  NOCYCLE;
 
½ÃÄö½º°¡ »ý¼ºµÇ¾ú½À´Ï´Ù.
 
SQL> INSERT INTO dept(deptno,dname,loc)
  2  VALUES(dept_deptno.NEXTVAL,'DEVELOP','COREA');
 
1 °³ÀÇ ÇàÀÌ ¸¸µé¾îÁ³½À´Ï´Ù.
 
SQL> SELECT * FROM dept;
 
    DEPTNO DNAME          LOC
---------- -------------- -------------
        10 ACCOUNTING     NEW YORK
        20 RESEARCH       DALLAS
        30 SALES          CHICAGO
        40 OPERATIONS     BOSTON
        50 DEVELOP        COREA
 
SQL> SELECT dept_deptno.CURRVAL FROM DUAL;
 
   CURRVAL
----------
        50
 
SQL> SELECT dept_deptno.NEXTVAL FROM DUAL;
 
   NEXTVAL
----------
        60
 
SQL> 
½ÃÄö½º ¼öÁ¤

ALTER SEQUENCE ¸í·É¾î¸¦ »ç¿ëÇÏ¿© ½ÃÄö½ºÀÇ °¢ ¿É¼ÇÀ» ¼öÁ¤ÇÒ ¼ö ÀÖ´Ù. ÇÏÁö¸¸, ¸ðµç °ªÀÌ ¼öÁ¤ °¡´ÉÇÑ °ÍÀº ¾Æ´Ï¹Ç·Î ¹Ì¸® Àß ¾Ë¾Æ µÖ¾ß ÇÑ´Ù.
• START WITH °ªÀº ½ÃÄö½º°¡ »ý¼ºµÈ Á÷ÈÄÀÇ ½ÃÀÛ °ªÀ» ÀǹÌÇϹǷΠº¯°æÇÒ ¼ö ¾ø´Ù. ±×·¯¹Ç·Î START WITH °ªÀ» º¯°æÇÏ·Á¸é ½ÃÄö½º¸¦ ´Ù½Ã »ý¼ºÇØ¾ß ÇÑ´Ù.
• ½ÃÄö½º°¡ MAXVALUE ¶Ç´Â MINVALUE¿¡ µµ´ÞÇÏ¸é ½ÃÄö½º°ªÀ» ÇÒ´ç¹ÞÁö ¸øÇϹǷΠerror°¡ ¹ß»ýÇÑ´Ù.
• ¼öÁ¤Àº ½ÃÄö½ºÀÇ ¼ÒÀ¯ÀÚ³ª alter ±ÇÇÑÀ» °¡ÁøÀÚ¸¸ °¡´ÉÇÏ´Ù.
• º¯°æ ÀÌÈÄÀÇ ½ÃÄö½º ¹øÈ£¸¸ ¿µÇâÀ» ¹Þ´Â´Ù.
• ´Ù¸¥ ¹øÈ£·Î ´Ù½Ã ½ÃÀÛÇÏ·Á¸é, ½ÃÄö½º¸¦ »èÁ¦ÇÑ ÈÄ ´Ù½Ã »ý¼ºÇØ¾ß ÇÑ´Ù.
• cycle ¿É¼ÇÀº ½ÃÄö½ºÀÇ °íÀ¯Æ¯¼ºÀ» À§¹ÝÇϹǷΠ±âº» Ű(PRIMARY KEY)°¡ Á¤ÀÇµÈ Ä÷³¿¡¼­´Â »ç¿ëÇÏÁö ¾Ê´Â´Ù.

¡¼Çü½Ä¡½
	ALTER SEQUENCE ½ÃÄö½º¸í
	[ INCREMENT BY Á¤¼ö]
	[ MAXVALUE n | NOMAXVALUE]
	[ MINVALUE n | NOMINVALUE]
	[ CYCLE | NOCYCLE]
	[ CACHE n | NOCACHE];
¡¼¿¹Á¦¡½
SQL> ALTER SEQUENCE dept_deptno
  2  INCREMENT BY 20
  3  MAXVALUE 500
  4  NOCACHE
  5  NOCYCLE;
 
½ÃÄö½º°¡ º¯°æµÇ¾ú½À´Ï´Ù.
 
SQL>
½ÃÄö½º »èÁ¦

DROP ¹®À» »ç¿ëÇÏ¿© ½ÃÄö½º¸¦ »èÁ¦ÇÑ´Ù.
• »èÁ¦´Â ½ÃÄö½º¼ÒÀ¯ÀÚ³ª DROP ANY SEQUENCE ±ÇÇÑÀ» °¡ÁøÀÚ¸¸ °¡´ÉÇÏ´Ù.

¡¼Çü½Ä¡½
	DROP SEQUENCE ½ÃÄö½ºÀ̸§;
¡¼¿¹Á¦¡½
SQL> DROP SEQUENCE dept_deptno;
 
½ÃÄö½º°¡ »èÁ¦µÇ¾ú½À´Ï´Ù.
 
SQL> 

½ÃÄö½º °ªÀÇ °£°ÝÀÌ ¹ß»ýÇÏ´Â °æ¿ì

• ROLLBACKÀÌ ¹ß»ýÇÑ °æ¿ì

• system crash°¡ ¹ß»ýÇÑ °æ¿ì

• ´Ù¸¥ Å×ÀÌºí¿¡¼­ °°Àº ½ÃÄö½º¸¦ »ç¿ëÇÒ ¶§

½ÃÄö½º¿¡ ´ëÇÑ Á¤º¸ È®ÀÎ

user_sequences»ç¿ëÀÚ°¡ ¸¸µç ½ÃÄö½º¿¡ ´ëÇÑ Á¤º¸
dba_sequencesµ¥ÀÌÅͺ£À̽º¿¡ ¼³Á¤µÈ ½ÃÄö½º¿¡ ´ëÇÑ Á¤º¸

¡¼¿¹Á¦¡½
SQL> SELECT sequence_name,min_value,max_value,increment_by,last_number
  2  FROM USER_SEQUENCES;
 
SEQUENCE_NAME   MIN_VALUE  MAX_VALUE INCREMENT_BY LAST_NUMBER
--------------- ---------- ---------- ------------ -----------
DEPT_DEPTNO              1      10000           10          50
 
SQL>