#84. 오라클 시퀀스(Oracle Sequence)
시퀀스(Sequence)
다중 사용자 환경에서 사용하는 숫자 자동 생성기.
PK, UK 칼럼의 값을 유일하게 자동으로 생성하는 경우에도 사용된다.
트랜잭션 내에서 시퀀스가 생성되어 사용되다가 롤백 되는 경우에 다음 시퀀스 번호는 SKIP 될 수 있다.
테이블 또는 칼럼과는 독립적으로 생성, 삭제된다.
CURRVAL : 시퀀스의 현재 값을 리턴
NEXTVAL : 시퀀스를 증가시키고 next value를 리턴한다.
[형식]
CREATE SEQUENC sequence_name
[INCREMENT BY n]
[START WITH n]
[{MAXVALUE n | NOMAXVALUE}]
[{MINVALUE n | NOMINVALUE}]
[{CYCLE | NOCYCLE}]
[{CACHE n | NOCACHE}]
INCREMENT BY n : 생성되는 Sequence번호의 간격을 정수 n으로 정의. 옵션이 생략되면 시퀀스는 1씩 증가한다.
START WITH n : 첫 번째 Sequence 번호를 정의, 옵션이 생략되면 시퀀스는 1부터 시작한다.
MAXVALUE n : Sequence의 최대값을 정의. NOMAXVALUE가 default이며 최대값은 10의 27승이다.
MINVALUE n : 생성 가능한 Sequence의 최소값을 정의, 디폴트가 NOMINVALUE이며 최소값은 1이다.
CACHE n : 서버가 메모리 캐시에 미리 생성해 놓는 시퀀스 개수. 기본갓은 20이다. 캐시하지 않으려면 NOCACHE 옵션을 사용한다.
[시퀀스를 사용할 수 없는 예]
SQL> CREATE TABLE seq_tab ( a NUMBER DEFAULT s1.NEXTVAL);
(* Error 발생)
SQL> SELECT DISTINCT s1.NEXTVAL FROM dual;
(* Error 발생)
SQL> SELECT SUM(salary) FROM s_emp GROUP BY s1.NEXTVAL;
(* Error 발생)
SQL> create sequence seq_e1;
시퀀스가 생성되었습니다.
SQL> select seq_e1.currval from dual;
select seq_e1.currval from dual
*
1행에 오류:
ORA-08002: 시퀀스 SEQ_E1.CURRVAL은 이 세션에서는 정의 되어 있지 않습니다
-- 최초 한번은 NEXTVAL해야 CURRVAL 값을 조회 가능하다.
SQL> create table test4 (n number);
테이블이 생성되었습니다.
SQL> insert into test4 values (seq_e1.nextval);
1 개의 행이 만들어졌습니다.
SQL> insert into test4 values (seq_e1.nextval);
1 개의 행이 만들어졌습니다.
SQL> insert into test4 values (seq_e1.nextval);
1 개의 행이 만들어졌습니다.
SQL> select * from test4;
N
----------
1
2
3
SQL> drop sequence seq_e1;
시퀀스가 삭제되었습니다.
댓글 없음:
댓글 쓰기