1. 시퀀스
1) 시퀀스 개념 이해와 시퀀스 생성
- 오라클에서는 행을 구분하기 위해서 기본 키를 두고 있습니다. 기본 키는 중복된 값을 가질 수 없으므로 항상 유일한 값을 가져야 함
- 기본 키가 유일한 값을 갖도록 사용자가 직접 값을 생성해내려면 부담이 클 것임
- 시퀀스는 테이블 내의 유일한 숫자를 자동으로 생성하는 자동 번호 발생기이므로 시퀀스를 기본 키로 사용하게 되면 사용자의 부담을 줄일 수 있음
2) 시퀀스 기본 형식
CREATE SEQUENCE sequence_name
[START WITH n] ①
[INCREMENT BY n] ②
[{MAXVALUE n | NOMAXVALUE}] ③
[{MINVALUE n | NOMINVALUE}] ④
[{CYCLE | NOCYCLE}] ⑤
[{CACHE n | NOCACHE}] ⑥
① START WITH
- 시퀀스 번호의 시작값을 지정할 때 사용됩니다. 만일 1부터 시작되는 시퀀스를 생성하려면 START WITH 1이라고 기술하면 됨
② INCREMENT BY
- 연속적인 시퀀스 번호의 증가치를 지정할 때 사용됩니다. 만일 1씩 증가하는 시퀀스를 생성하려면 INCREMENT BY 1이라고 기술
③ MAXVALUE n | NOMAXVALUE
- MAXVALUE 은 시퀀스가 가질 수 있는 최대값을 지정합니다. 만일 NOMAXVALUE를 지정하게 되면 ASCENDING 순서일 경우에는 1027승이고 DESCENDING 순서일 경우에는 -1로 설정
④ MINVALUE n | NOMINVALUE
- MINVALUE 은 시퀀스가 가질수 있는 최소값을 지정합니다. 만일 NOMINVALUE을 지정하게 되면 ASCENDING 순서일 경우에는 1이고 DESCENDING 순서일 경우에는 1026승으로 설정
⑤ CYCLE | NOCYCLE
- CYCLE 은 지정된 시퀀스 값이 최대값까지 증가가 완료되게 되면 다시 START WITH 옵션에 지정한 시작 값에서 다시 시퀀스를 시작하도록 합니다. NOCYCLE은 증가가 완료되게 되면 에러를 유발
⑥ CACHE n | NOCACHE
- CACHE 은 메모리상의 시퀀스 값을 관리하도록 하는 것인데 기본 값은 20입니다. NOCACHE는 원칙적으로 메모리 상에서 시퀀스를 관리하지 않음
부서 번호를 자동으로 부여해주는 시퀀스 객체를 생성하는 문장을 만들어보자
CREATE SEQUENCE DEPT_DEPTNO_SEQ
INCREMENT BY 10
START WITH 10;
시작 값이 10 이고 10씩 증가하는 시퀀스 DEPT_DEPTNO_SEQ 을 생성
3) 시퀀스 관련 데이터 딕셔너리
- 사용자가 작성한 객체들의 정보를 저장하고 있는 데이터 딕셔너리의 이름을 보면 다음과 같은 규칙성이 있음
- 테이블(TABLE) 객체에 대한 정보를 저장하는 데이터 딕셔너리는 USER_TABLES이고, 뷰(VIEW)객체에 대한 정보를 저장하는 데이터 딕셔너리는 USER_VIEWS이므로 이번 장에서 새로 배운 시퀀스(SEQUENCE)에 대한 자료사전의 이름은 USER_SEQUENCES 이라고 사료될 것
- 생성된 시퀀스 객체에 대한 정보를 저장하는 데이터 딕셔너리로는 USER_SEQUENCES가 있음
4) CURRVAL, NEXTVAL
CURRVAL : 현재 값을 반환한다.
NEXTVAL : 현재 시퀀스 값의 다음 값을 반환한다
- 시퀀스의 현재 값을 알아내기 위해서 CURRVAL를 사용하고, 다음 값을 알아내기 위해서는 NEXTVAL를 사용
- CURRVAL에 새로운 값이 할당되기 위해서는 NEXTVAL로 새로운 값을 생성
- NEXTVAL로 새로운 값을 생성한 다음에 이 값을 CURRVAL에 대체하게 됨
- NEXTVAL, CURRVAL을 사용할 수 있는 경우
서브 쿼리가 아닌 SELECT 문
INSERT 문의 SELECT 절
INSERT 문의 VALUE절
UPDATE문의 SET 절
- NEXTVAL, CURRVAL을 사용할 수 없는 경우
VIEW의 SELECT 절
DISTINCT 키워드가 있는 SELECT 문
GROUP BY, HAVING, ORDER BY 절이 있는 SELECT 문
SELECT, DELETE, UPDATE의 서브 쿼리
CREATE TABLE, ALTER TABLE 명령의 DEFAULT 값
'DB > Oracle' 카테고리의 다른 글
Oracle DB #14 사용자 관리 (0) | 2021.06.17 |
---|---|
Oracle DB #13 인덱스 (0) | 2021.06.15 |
Oracle DB #11 가상 테이블인 뷰 (0) | 2021.06.10 |
Oracle DB #10 데이터 무결성을 위한 제약 조건 (0) | 2021.06.09 |
Oracle DB #9 데이터 무결성을 위한 제약조건 (0) | 2021.06.05 |