< Sequence >
- 자동으로 고유한 번호를 반환해 주는 번호생성기와 같은 Object
- 어느 테이블이든 사용가능하지만 한 테이블에서 사용하는게 좋음 ( 값이 새로 시작하는게 아님 )
· A 테이블에서 5번 쓰고 B 테이블에서 3번 쓴 후 다시 A 테이블에 쓰면 공백이 생김
- 신입사원이 들어올때마다 시퀀스가 기억하고 자동으로 번호를 제공할 수 있음
① 시퀀스 생성
- INCREMENT BY n
· 시퀀스 번호 사이 n 만큼 간격을 지정 ( 음수도 가능 )
· default = 1
- START WITH n
· 시퀀스 번호의 시작값을 n으로 지정
· default = 1
- MAXVALUE/MINVALUE n
· 시퀀스의 최대값, 최소값 지정
· default : NOMAXVALUE/NOMINVALUE · 생략시 시스템에 정의되어있는 최대값(10^27), 최소값(-10^26) 사용
- CYCLE
· 최대값/최소값에 도달하면 처음부터 다시 순환
· 별로 권장하지 않음 ! (주로 PK 컬럼에 많이 쓰기때문에)
· default : NOCYCLE (최대/최소값에 도달하면 더이상 값을 반환하지 않음)
- CACHE n
· 시퀀스 값을 미리 n만큼 할당받음
· 캐시 옵션 쓰면 속도가 빨라짐
· default : CACHE 20
CREATE SEQUENCE 시퀀스명
[INCREMENT BY n]
[START WITH n]
[{MAXVALUE n | NOMAXVALUE}]
[{MINVALUE n | NOMINVALUE}]
[{CACHE n | NOCACHE}];
- 옵션의 순서는 상관없음
CREATE SEQUENCE dept_id_seq
INCREMENT BY 10
START WITH 180
MAXVALUE 1000;
· 부서 테이블에 부서가 신설되면 180부터 시작돼서 10씩 증가되는 부서번호 부여
· 현재 부서 테이블에 MAX(department_id)가 170이여야함
② 시퀀스 사용
- 시퀀스명.NEXTVAL
· 사용가능한 다음 시퀀스값 반환
INSERT INTO 테이블명
VALUES (시퀀스명.NEXTVAL, 값1, 값2, ...);
INSERT INTO departments
VALUES (dept_id_seq.NEXTVAL, 'HHHH', 107, 1700);
- 시퀀스명.CURRVAL
· 현재 시퀀스 값, 즉 마지막 시퀀스값 반환
· 주로 몇번까지 썼는지 확인하기 위해 사용
SELECT 시퀀스명.CURRVAL
FROM dual;
SELECT dept_id_seq.CURRVAL
FROM dual;
③ 시퀀스 수정
- 시퀀스값의 간격, 최대값/최소값, CYCLE 여부 수정가능하다
- 단, 시작값은 수정 불가 !
ALTER SEQUENCE 시퀀스명
[변경하고자 하는 옵션];
④ 시퀀스 삭제
- 데이터는 그대로 남음
DROP SEQUENCE 시퀀스명;
'자바 웹 개발자가 될거야 > DB' 카테고리의 다른 글
[Oracle] 오라클 SQL Where절 문법 연습하기 (0) | 2021.12.16 |
---|---|
[Oracle] Data Dictionary 구성요소와 사용 (0) | 2021.12.16 |
[Oracle] View 생성 및 삭제하기 (0) | 2021.12.14 |
[Oracle] 테이블 절단하기 / TRUNCATE문 (0) | 2021.12.14 |
[Oracle] 테이블 삭제 및 복구하기 / DROP문 (0) | 2021.12.14 |