본문 바로가기
OraclE

오라클에서 시퀀스(SEQUENCE) 사용하기

by 타마마임팩트_쫀 2008. 9. 17.
오라클에서 시퀀스(sequence) 사용하는 방법을 알아보겠습니다.

오라클의 시퀀스는 MySql이나 MSSQL의 auto_incremet(자동증가)와 같은 것이라 생각하면 되겠습니다.

이것은 중복되지 않는 값을 주기 위해 사용하는데,,,

만약, 회원 1000명에게 회원번호를 부여해야 하는데 서로 중복되지 않는 값을 부여해야 할 경우,

처음 회원에게는 1번을, 그 다음회원에게는 2번을,,,, 1000번까지 각각 부여할 수 있을 겁니다.

즉, 지금까지 부여한 번호를 간직하고 있다가 다음 회원이 왔을 때 그 다음 번호를 부여하는 역할을 시퀀스라는 넘이 해줍니다.

 
 

시퀀스 테스트를 위해 임의의 테이블을 만들어 보겠습니다.

CREATE TABLE test (
            sq_id NUMBER
,            sq_name VARCHAR2(20)
);



 
이제 test라는 테이블에 시퀀스를 만들어 보겠습니다.
 

CREATE SEQUENCE sq_test
INCREMENT BY 1
START WITH 10000;



INCREMENT BY 1 : 자동 증가 칼럼의 증가치가 1이라는 뜻
START WITH 10000 : 자동 증가 칼럼이 10000부터 증가한다는 뜻


CREATE SEQUENCE 라는 문장을 사용하여 sq_test 이름의 시퀀스를 만들었습니다.

이제부터 sq_test를 사용하여 sq_id를 자동 증가 칼럼으로 사용할 수가 있습니다.

 

 
그럼, 데이터를 입력해서 확인해 보겠습니다.
 

INSERT INTO test(sq_id, sq_name) VALUES(sq_test.NEXTVAL, '이순신');


 
여기서, sq_id에 MYSQ.NEXTVAL이라는 데이터를 입력했는데, 시퀀스의 다음값을 가져오게 됩니다.
(시퀀스를 사용할 때 NEXTVAL이라는 슈도 칼럼(Pseudo-column)을 사용합니다.)

그럼, 실제로 sq_id에 값이 어떻게 들어갔는지 확인해 보겠습니다.
 

SELECT * FROM test;


SQ_ID            SQ_NAME
----------------------
10000            이순신



 
시퀀스 생성시에 START WITH 10000; 라고 했기 때문에 10000이라는 값이 들어갔습니다.

다시 한번 데이타를 입력해 보겠습니다.
 

INSERT INTO test(sq_id, sq_name) VALUES(sq_test.NEXTVAL, '홍길동');


SELECT * FROM test;


SQ_ID            SQ_NAME
----------------------
10000            이순신
10001            홍길동

 

 
10000 에서 1이 자동증가하여 10001이라는 값이 입력되었습니다.

이번엔,,, SQ_NAME이 '홍길동'인 로우를 지워보겠습니다.
 

DELETE FROM test WHERE sq_name = '홍길동';


SQ_ID            SQ_NAME
----------------------
10000            이순신

 

 
다시 새로운 데이터를 하나 넣겠습니다.
 

INSERT INTO test(sq_id, sq_name) VALUES(sq_test.NEXTVAL, '김철수');


SELECT * FROM test;


SQ_ID            SQ_NAME
----------------------
10000            이순신
10002            김철수


 

 
sq_id에 10001이 아니라 10002가 들어가 있습니다.

왜냐하면, 시퀀스는 그 특성상 일단 한번 증가하면 그 값이 절대 다시 줄어들지 않기 때문입니다.

이것은 mysql이나 mssql의 auto increment(자동증가)와도 동일합니다.
 


시퀀스를 생성할 때, 값의 범위를 지정할 수 있습니다.

CREATE SEQUENCE sq_test
INCREMENT BY 1
START WITH 100;
MINVALUE 1
MAXVALUE 1000



이렇게 시퀀스를 생성하면, 100부터 시작하고 값은 1~1000 사이의 값만 생성을 시킬 수 있습니다.


[출처] http://iurim.com/uboard.asp?id=webstudy_tip&cate_no=307&u_no=310&code=webstudy

'OraclE' 카테고리의 다른 글

ASSM에서 Freelist 관리  (0) 2008.09.25
DBA Table / View 정리  (0) 2008.09.17
Windows 32bit OS 에서 Oracle Memory Sizing  (0) 2008.08.13
BITMAPPED INDEX  (0) 2008.08.12
REVERSE KEY INDEX  (0) 2008.08.12