데이터베이스 - 시퀀스(Sequence)
2022. 11. 9. 17:31ㆍ데이터베이스
시퀀스(SEQUENCE)
- 값의 의미가 없다.
시퀀스 생성과 확인
SQL> CREATE SEQUENCE 시퀀스
2 [ START WITH 시작_값
3 INCREMENT BY 증가_값
4 MAXVALUE [상한_값 | NOMAXVALUE]
5 MINVALUE [하한_값 | NOMINVALUE]
6 CYCLE | NOCYCLE
7 CACHE [cache_개수| NOCACHE]];
SQL> ALTER SEQUENCE 시퀀스
2 INCREMENT BY 증가_값
3 MAXVALUE [상한_값 | NOMAXVALUE]
4 MINVALUE [하한_값 | NOMINVALUE]
5 CYCLE | NOCYCLE
6 CACHE cache_개수| NOCACHE;
SQL> DROP SEQUENCE 시퀀스;
SQL> SELECT sequence_name, max_value, min_value, increment_by,
2 cache_size, last_number, cycle_flag
3 FROM user_sequences;
SQL> ... 시퀀스.NEXTVAL ...
SQL> ... 시퀀스.CURRVAL ...
예제 1. 실습용 시퀀스를 생성하고 생성된 시퀀스의 설정을 검색한다.
SQL> CREATE SEQUENCE emp_eno_seq
2 START WITH 1
3 INCREMENT BY 1
4 NOMAXVALUE
5 NOMINVALUE
6 NOCYCLE
7 CACHE 20;
시퀀스가 생성되었습니다.
SQL> CREATE SEQUENCE dept_dno_seq;
시퀀스가 생성되었습니다.
SQL> SELECT sequence_name, max_value, min_value, increment_by,
2 cache_size, last_number, cycle_flag
3 FROM user_sequences;
SEQUENCE_NAME MAX_VALUE MIN_VALUE INCREMENT_BY CACHE_SIZE LAST_NUMBER C
--------------- ---------- ---------- ------------ ---------- ----------- -
DEPT_DNO_SEQ 1.0000E+28 1 1 20 1 N
EMP_ENO_SEQ 1.0000E+28 1 1 20 1 N
예제 2. 순환 시퀀스를 생성하고 생성된 시퀀스의 설정을 검색한다.
SQL> CREATE SEQUENCE co_cno_seq
2 MAXVALUE 5
3 CYCLE;
CREATE SEQUENCE co_cno_seq
*
1행에 오류:
ORA-04013: CACHE 에는 1 사이클보다 작은 값을 지정해야 합니다
SQL> CREATE SEQUENCE co_cno_seq
2 MAXVALUE 50
3 CYCLE;
시퀀스가 생성되었습니다.
SQL> SELECT sequence_name, max_value, min_value, increment_by,
2 cache_size, last_number, cycle_flag
3 FROM user_sequences;
SEQUENCE_NAME MAX_VALUE MIN_VALUE INCREMENT_BY CACHE_SIZE LAST_NUMBER C
--------------- ---------- ---------- ------------ ---------- ----------- -
CO_CNO_SEQ 50 1 1 20 1 Y
DEPT_DNO_SEQ 1.0000E+28 1 1 20 1 N
EMP_ENO_SEQ 1.0000E+28 1 1 20 1 N
예제 3. [예제 1]에서 생성한 emp_eno_seq 시퀀스로부터 값을 할당 받아 사용한다.
- 실습전 emp 테이블의 모든 데이터를 지운다.
SQL> DELETE FROM emp;
17 행이 삭제되었습니다.
SQL> COMMIT;
커밋이 완료되었습니다.
SQL> SELECT sequence_name, max_value, min_value, increment_by,
2 cache_size, last_number, cycle_flag
3 FROM user_sequences;
SEQUENCE_NAME MAX_VALUE MIN_VALUE INCREMENT_BY CACHE_SIZE LAST_NUMBER C
--------------- ---------- ---------- ------------ ---------- ----------- -
CO_CNO_SEQ 50 1 1 20 1 Y
DEPT_DNO_SEQ 1.0000E+28 1 1 20 1 N
EMP_ENO_SEQ 1.0000E+28 1 1 20 1 N
SQL> INSERT INTO emp (eno, ename) VALUES (emp_eno_seq.nextval, '첫 번째');
1 개의 행이 만들어졌습니다.
SQL> SELECT emp_eno_seq.currval FROM dual;
CURRVAL
----------
1
SQL> SELECT eno, ename FROM emp;
ENO ENAME
---- -------
1 첫 번째
SQL> ROLLBACK;
롤백이 완료되었습니다.
SQL> INSERT INTO emp (eno, ename) VALUES (emp_eno_seq.nextval, '두 번째');
1 개의 행이 만들어졌습니다.
SQL> COMMIT;
커밋이 완료되었습니다.
SQL> SELECT eno, ename FROM emp;
ENO ENAME
---- ----------
2 두 번째
SQL> SELECT sequence_name, max_value, min_value, increment_by,
2 cache_size, last_number, cycle_flag
3 FROM user_sequences;
SEQUENCE_NAME MAX_VALUE MIN_VALUE INCREMENT_BY CACHE_SIZE LAST_NUMBER C
--------------- ---------- ---------- ------------ ---------- ----------- -
CO_CNO_SEQ 50 1 1 20 1 Y
DEPT_DNO_SEQ 1.0000E+28 1 1 20 1 N
EMP_ENO_SEQ 1.0000E+28 1 1 20 21 N
'데이터베이스' 카테고리의 다른 글
오라클 DB - REDO LOG FILE (0) | 2022.11.09 |
---|---|
오라클 DB - 원격접속 (0) | 2022.11.09 |
데이터베이스 - 인덱스(INDEX), 뷰(VIEW) (0) | 2022.11.09 |
ORACLE - FARAMETER FILES (0) | 2022.11.08 |
데이터베이스 - 제약 조건 (UK, NOT NULL, CHECK) (0) | 2022.11.08 |