오라클에서 시퀀스(sequence) 사용하는 방법을 알아보겠습니다.
오라클의 시퀀스는 MySql이나 MSSQL의 auto_incremet(자동증가)와 같은 것이라 생각하면 되겠습니다.
이것은 중복되지 않는 값을 주기 위해 사용하는데,,,
만약, 회원 1000명에게 회원번호를 부여해야 하는데 서로 중복되지 않는 값을 부여해야 할 경우,
처음 회원에게는 1번을, 그 다음회원에게는 2번을,,,, 1000번까지 각각 부여할 수 있을 겁니다.
즉, 지금까지 부여한 번호를 간직하고 있다가 다음 회원이 왔을 때 그 다음 번호를 부여하는 역할을 시퀀스라는 넘이 해줍니다.
시퀀스 테스트를 위해 임의의 테이블을 만들어 보겠습니다.
CREATE TABLE test (
이제 test라는 테이블에 시퀀스를 만들어 보겠습니다.
CREATE SEQUENCE sq_test
INCREMENT BY 1 : 자동 증가 칼럼의 증가치가 1이라는 뜻
START WITH 10000 : 자동 증가 칼럼이 10000부터 증가한다는 뜻
CREATE SEQUENCE 라는 문장을 사용하여 sq_test 이름의 시퀀스를 만들었습니다.
이제부터 sq_test를 사용하여 sq_id를 자동 증가 칼럼으로 사용할 수가 있습니다.
그럼, 데이터를 입력해서 확인해 보겠습니다.
여기서, sq_id에 MYSQ.NEXTVAL이라는 데이터를 입력했는데, 시퀀스의 다음값을 가져오게 됩니다.
(시퀀스를 사용할 때 NEXTVAL이라는 슈도 칼럼(Pseudo-column)을 사용합니다.)
그럼, 실제로 sq_id에 값이 어떻게 들어갔는지 확인해 보겠습니다.
SQ_ID SQ_NAME
----------------------
10000 이순신
시퀀스 생성시에 START WITH 10000; 라고 했기 때문에 10000이라는 값이 들어갔습니다.
다시 한번 데이타를 입력해 보겠습니다.
SQ_ID SQ_NAME
----------------------
10000 이순신
10001 홍길동
10000 에서 1이 자동증가하여 10001이라는 값이 입력되었습니다.
이번엔,,, SQ_NAME이 '홍길동'인 로우를 지워보겠습니다.
SQ_ID SQ_NAME
----------------------
10000 이순신
다시 새로운 데이터를 하나 넣겠습니다.
SQ_ID SQ_NAME
----------------------
10000 이순신
10002 김철수
sq_id에 10001이 아니라 10002가 들어가 있습니다.
왜냐하면, 시퀀스는 그 특성상 일단 한번 증가하면 그 값이 절대 다시 줄어들지 않기 때문입니다.
이것은 mysql이나 mssql의 auto increment(자동증가)와도 동일합니다.
시퀀스를 생성할 때, 값의 범위를 지정할 수 있습니다.
CREATE SEQUENCE sq_test
이렇게 시퀀스를 생성하면, 100부터 시작하고 값은 1~1000 사이의 값만 생성을 시킬 수 있습니다.
[출처] http://iurim.com/uboard.asp?id=webstudy_tip&cate_no=307&u_no=310&code=webstudy
오라클의 시퀀스는 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 |