▶ SEQUENCE(시퀀스)
- 자동으로 번호를 발생시켜주는 역할을 하는 객체이다.
- 정수값을 자동으로 순차적으로 발생시켜준다.
- 시퀀스가 가장 많이 사용되는 위치는 INSERT문의 PK값에 넣을 때이다.
■ 시퀀스객체 생성 구문
[표현법]
CREATE SEQUENCE 시퀀스명
START WITH 시작 숫자 => 생략 가능하다. 처음 발생시킬 시작값 기본값은 1
INCREMENT BY 증가값 => 생략 가능하다. 기본값은 1씩 증가, 한번 시퀀스 증가할때마다 몇 씩 증가할 것인지 결정
MAXVALUE 최대값 => 생략 가능하다. 최대값 지정
MINVALUE 최소값 => 생략 가능하다. 최소값 지정
CYCLE/NOCYCLE => 생략 가능하다. 값의 순환여부를 결정한다. 기본값은 NOCYCLE
CACHE 바이트크기/NOCACHE => 생략 가능하다. 캐시메모리 사용 여부 지정 기본 캐시 사이즈는 20BYTE이다.
ex)
CREATE SEQUENCE SEQ_EMPNO
START WITH 300
INCREMENT BY 5
MAXVALUE 310
NOCYCLE
NOCACHE;
● 캐시메모리
- 시퀀스로부터 미리 발생될 값들을 생성해서 저장해두는 공간
- 매번 호출할때마다 새로이 번호를 생성하는 것보다 캐시메모리 공간에 미리 생성된 값들을 가져다 쓰게 되면 훨씬 속도가 빠르다.
- 단, 접속기 끊기고나서 재접속 후 기존에 생성되어 있던 값들은 날아가고 없다.
● 현재 접속한 계정이 소유하고 있는 시퀀스에 대한 정보 조회용 데이터 딕셔너리
SELECT * FROM USER_SEQUENCES;
■ 시퀀스 사용 구문
시퀀스명.CURRVAL : 현재 시퀀스의 값(마지막으로 성공적으로 발생된 NEXTVAL의 값)
시퀀스명.NEXTVAL : 현재 시퀀스의 값을 증가시키고 그 증가된 시퀀스의 값
== 시퀀스명.CURRVAL + INCREMENT BY 값만큼 증가된 값
- 단, 시퀀스 생성 후 첫번째 NEXTVAL은 START WITH으로 지정된 시작값으로 발생된다.
- 시퀀스 생성 후 NEXTVAL이 호출되지 않은 시점에서 CURRVAL은 수행이 불가능하다.
- LAST_NUMBER : 앞으로 NEXTVAL을 한번 수행할 경우 얻어올 수 있는 예정값
■ 시퀀스 변경
[표현법]
ALTER SEQUENCE 시퀀스명
INCREMENT BY 증가값 => 생략 가능하다. 기본값은 1씩 증가, 한번 시퀀스 증가할때마다 몇 씩 증가할 것인지 결정
MAXVALUE 최대값 => 생략 가능하다. 최대값 지정
MINVALUE 최소값 => 생략 가능하다. 최소값 지정
CYCLE/NOCYCLE => 생략 가능하다. 값의 순환여부를 결정한다. 기본값은 NOCYCLE
CACHE 바이트크기/NOCACHE => 생략 가능하다. 캐시메모리 사용 여부 지정 기본 캐시 사이즈는 20BYTE이다.
- START WITH은 변경 불가 : 정 바꾸고 싶다면 시퀀스를 삭제했다가 재생성 해줘야한다.
■ 사용할 수 없는 구문
- VIEW의 SELECT문
- DISTINCT가 포함된 SELECT문
- GROUP BY HAVING ORDER BY가 있는 SELECT문
- 서브쿼리안에서 X
- CREATE TABLE, ALTER TABLE의 DEFALUT값으로도 사용이 불가능하다.
'DB' 카테고리의 다른 글
DB (14) PL/SQL (0) | 2023.06.14 |
---|---|
DB (13) OBJECT(INDEX) (0) | 2023.06.13 |
DB (11) OBJECT (0) | 2023.06.13 |
DB (10) TCL(COMMIT, ROLLBACK, SAVEPOINT) (0) | 2023.06.13 |
DB (9) DCL(GRANT, REVOKE) (0) | 2023.06.13 |