'시퀀스'에 해당되는 글 1건
- 2009.04.15 [Oracle] 오라클 객체(3) [SEQUENCE(시퀀스)]
[Oracle] 오라클 객체(3) [SEQUENCE(시퀀스)]
- 유일(UNIQUE)한 값을 생성해주는 오라클 객체 입니다.
- 시퀀스를 생성하면 기본키와 같이 순차적으로 증가하는 컬럼을 자동적으로 생성할 수 있습니다.
- 보통 primary key 값을 생성하기 위해 사용합니다.
- 메모리에 Cache되었을 때 Swquence값의 엑세스 효율이 증가 합니다.
- Sequence는 테이블과는 독립적으로 저장되고 생성됩니다. 따라서 하나의 sequence를 여러 테이블에서 쓸 수 있습니다.
** 시퀀스 생성 **
**[ Syntax ] **************************************
* CREATE SEQUENCE sequence_name
* [ START WITH n ]
* [ INCREMENT BY n ]
* [ MAXVALUE n | NOMAXVALUE ]
* [ MINVALUE n | NOMINVALUE ]
* [ CYCLE | NOCYCLE ]
**************************************************
- START WITH : 시퀀스의 시작 값을 지정 합니다. n을 1로 지정하면 1부터 순차적으로 시퀀스 번호가 증가 합니다.
- INCREMENT BY : 시퀀스의 증가 값을 말합니다. n을 2로 하면 2씩 증가합니다. START WITH를 1로 하고 INCREMENT BY를 2로 하면 1,3,5,7... 이렇게 시퀀스 번호가 증가 됩니다.
- MAXVALUE n | NOMAXVALUE : MAXVALUE는 시퀀스가 증가할 수 있는 최대값을 말합니다.
NOMAXVALUE는 시퀀스의 값을 무한대로 지정합니다.
- MINVALUE n | NOMINVALUE : MINVALUE는 시퀀스의 최소값을 지정 합니다.
기본 값은 1이며, NOMINVALUE를 지정할 경우 최소값은 무한
대가 됩니다.
SQL> CREATE SEQUENCE emp_seq
START WITH 1
INCREMENT BY 1
MAXVALUE 100000;
sequence create.
시작 값이 1이고 1씩 증가하고, 최대값이 100000만이 되는 시퀀스를 생성했습니다.
SQL> INSERT INTO emp(empno, ename, hiredate)
VALUES(emp_seq, NEXTVAL, ' julia', sysdate);
empno는 컬럼값을 입력할 때 일일이 다음 값을 기억하지 않아도 NEXTVAL을 사용하여 자동으로 입력할 수 있습니다.
CURRVAL : 현재 값을 반환 합니다.
NEXTVAL : 현재 시퀀스값의 다음 값을 반환 합니다.
SQL> SELECT emp_seq.CURRVAL FROM DUAL;
CURRVAL
---------
1
SQL> SELECT emp_seq.NEXTVAL FROM DUAL;
NEXTVAL
---------
2
** 사용규칙 **
- NEXTVAL, CIRRVAL을 사용할 수 있는 경우
- subquery가 아닌 select문
- insert문의 selectㅁ\절
- insert문의 value절
- update문의 set절
- NEXTVAL, DURRVAL을 사용할 수 없는 경우
- view의 select절
- distinct 키워드가 있는 select문
- group by, havinh, order by절이 있는 select문
- select, delete, update의 Subquery
- create table, alter table명령의 default값
** 시퀀스의 수정 및 삭제 **
**[ Syntax] ****************************************
* ALTER SEQUENCE sequence_name
* [ INCREMENT BY n]
* [ MAXVALUE n | NOMAXVALUE ]
* [ MINVALUE n | NOMINVALUE ]
* [ CYCLE | NOCYCLE ]
****************************************************
START WITH는 수정할 수 없습니다.
- START WITH절이 없다는 점을 빼고는 CREATE SEQUENCE와 같습니다.
SQL> ALTER SEQUENCE emp_seq
INCREMENT BY 2
CYCLE;
sequence altered.
2씩 증가하고, 최대값을 넘으면 다시 처음부터 순환하도록 수정하였습니다.
DROP문을 필요하지 않은 시퀀스는 삭제 할 수 있습니다.
SQL> DROP SEQUENCE PRD_SEQ;
sequence dropped.
================================================ * Oracle Community OracleClub.com * http://www.oracleclub.com * http://www.oramaster.net * 운영자 : 김정식 (oramaster _at_ empal.com) ================================================ |
※ 강좌를 다른 홈페이지에 기재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^ |
'Database / Sql' 카테고리의 다른 글
[Oracle] DML 절에 With Check option 조건 (0) | 2009.06.30 |
---|---|
[Oracle] 오라클 객체(4) [SYNONYM] (0) | 2009.04.15 |
[Oracle] 오라클 객체(2) [VIEW 테이블] (0) | 2009.04.15 |
[Oracle] 오라클 객체(1) [인덱스(Index)] (0) | 2009.04.15 |
[Oracle] PL/SQL에서 엔터(enter)키 역할 사용하는 방법 (0) | 2009.04.14 |