시퀀스 생성
CREATE SEQUENCE [스키마명.]시퀀스명
INCREMENT BY 증감숫자
START WITH 시작숫자
NOMINVALUE | MINVALUE 최솟값
NOMAXVALUE | MAXVALUE 최댓값
NOCYCLE | CYCLE
NOCACHE | CACHE;
• INCREMENT BY 증감숫자: 증감숫자는 0이 아닌 정수. 양수이면 증가, 음수이면 감소. 디폴트 값은 1
• START WITH 시작숫자: 시작숫자의 디폴트 값은 증가일 때는 MINVALUE, 감소일 경우 MAXVALUE.
• NOMINVALUE: 디폴트 값으로 증가일 때 1, 감소의 경우 -(1027 -1).
• MINVALUE 최솟값: 최솟값은 시작숫자와 작거나 같아야 하고 MANVALUE보다 작아야 한다.
• NOMAXVALUE: 디폴트 값으로 증가일 때 1028-1, 감소의 경우 -1.
• MAXVALUE 최댓값: 최댓값은 시작숫자와 같거나 커야 하고 MINVALUE보다 커야 한다.
• NOCYCLE: 디폴트 값으로 최대나 최솟값에 도달하면 생성 중지.
• CYCLE: 증가는 최댓값에 도달하면 다시 최솟값부터 시작, 감소는 최솟값에 도달하면 다시 최댓값에서 시작.
• NOCACHE: 디폴트로 메모리에 시퀀스 값을 미리 할당해 놓지 않으며 디폴트 값은 20.
• CACHE: 메모리에 시퀀스 값을 미리 할당해 놓음.
시퀀스를 만들어 보자.
입력
CREATE SEQUENCE my_seq1
INCREMENT BY 1
START WITH 1
MINVALUE 1
MAXVALUE 1000
NOCYCLE
NOCACHE;
결과
sequence MY_SEQ1이(가) 생성되었습니다.
이 시퀀스는 1부터 시작해 1씩 증가하며 최솟값 1부터 최댓값 1000까지 순번을 자동 생성한다. 그럼 이 시퀀스로 ex2_8테이블의 col1 컬럼에 값을 입력해 보자.
입력
DELETE ex2_8; -- 기존 데이터를 지운다.
INSERT INTO ex2_8 (col1) VALUES ( my_seq1.NEXTVAL);
결과
1개 행 이(가) 삽입되었습니다.
입력
INSERT INTO ex2_8 (col1) VALUES ( my_seq1.NEXTVAL);
결과
1개 행 이(가) 삽입되었습니다.
입력
SELECT *
FROM ex2_8;
결과
COL1 COL2
---------- ----------
1
2
INSERT를 두 번 실행했으므로 col1 컬럼에 1, 2 값이 순차적으로 들어 갔다. 시퀀스명.NEXTVAL을 사용하면 해당 시퀀스에서 다음 순번 값을 자동으로 가져온다. 또한 시퀀스명.CURRVAL을 사용하면 해당 시퀀스의 현재 값을 알 수 있다.
입력
SELECT my_seq1.CURRVAL
FROM DUAL;
결과
CURRVAL
----------
2
다시 한번 NEXTVAL로 값을 가져오면 3이 입력될 것이다.
입력
INSERT INTO ex2_8 (col1) VALUES ( my_seq1.NEXTVAL);
결과
1개 행 이(가) 삽입되었습니다.
입력
SELECT *
FROM ex2_8;
결과
COL1 COL2
---------- ----------
1
2
3
주의할 사항은 NEXTVAL을 사용하면 값이 계속 증가된다는 점이다. 즉 INSERT문이 아닌 SELECT문에서 사용하더라도 값이 증가된다.
입력
SELECT my_seq1.NEXTVAL
FROM DUAL;
결과
NEXTVAL
----------
4
입력
INSERT INTO ex2_8 (col1) VALUES ( my_seq1.NEXTVAL);
결과
1개 행 이(가) 삽입되었습니다.
입력
SELECT *
FROM ex2_8;
결과
COL1 COL2
---------- ----------
1
2
3
5