SEQUENCE 객체 정의
- 연속, 열거, 순서 의미
- 자동적으로 번호 생성하기 위한 객체
- 테이블과 독립이므로 여러 곳에서 사용 가능
SEQUENCE 이용하는 경우
- PRIMARK KEY 를 설정할 후보기카 없거나 PK를 특별히 의미 있게 만들지 않아도 되는 경우
- 자동으로 순서적으로 번호 필요한 경우
- INCREMENT BY : 시퀀스 실행시 증가 시킬값
- START WITH : 시퀀스의 시작값(MINVALUE과 같거나 커야한다)
- MINVALUE: 시퀀스가 시작되는 최솟값
- MAXVALUE : 시퀀스가 끝나는 최댓값
- NOCYCLE | CYCLE : NOCYCLE( 반복안함), CYCLE(시퀀스의 최댓값에 도달 시 최솟값 1부터 다시시작)
- NOCACHE | CACHE : NOCACHE(사용안함), CACHE(캐시를 사용하여 미리 값을 할당해 놓아서 속도가 빠르며, 동시 사용자가 많을 경우 유리)
- NOORDER | ORDER : NOORDER(사용안함), ORDER(요청 순서로 값을 생성하여 발생 순서를 보장하지만 조금의 시스템 부하가 있음)
SEQUENCE 생성
CREATE SEQUENCE emp_seq
INCREMENT BY 1
START WITH 1
MINVALUE 1
MAXVALUE 9999
NOCYCLE
NOCACHE
NOORDER;
- 1부터 시작하여 9999까지 1씩 증가
- CACHE를 사용할 경우
- CACHE 또는 CACHE "값"으로 지정할 수 있다
- 값을 지정하지 않으면 기본값은 20이다.
- 지정한 값만큼 시퀀스를 미리 생성해 놓는다
CACHE -- 기본값 20
또는
CACHE 100 -- 지정한 값만큼
SEQUENCE 변경
- START WITH 변경 할 수 없다.
SEQUENCE 사용
시퀀스명.NEXTVAL
SELECT 시퀀스명.NEXTVAL
FROM 테이블명
- 일렬번호 생성
- 시퀀스를 실행할 때 마다 값이 증가하니 주의!
- 증가된 값을 다시 내릴 수 없다.
- INSERT문에서 순번을 매길 때 유용하게 사용
더보기
INSERT INTO EMP(EMPNO, ENAME, JOB, MGR, JIREDATE, SAL, COMM, DEPTNO)
VALUES (EMP_SEQ.NEXTVAL
,'TIGER'
,'ANALYST'
,7566
,TRUNC(SYSDATE)
,3000
,NULL
,20)
시퀀스명.CURRVAL
SELECT 시퀀스명.CURRVAL
FROM 테이블명;
- 현재 시퀀스 순번 가져올 수 있다.
- 여러번 실행해도 순번 증가하지 않고, 현재 순번만 가져온다.
- CURRVAL은 NEXTVAL을 한번 실행한 세션에만 사용 가능
- 사용 안할시 에러 발생(ORA-08002 : EMP_SEQ.CURRVAL은 이 세션에서는 정의 되어 있지 않습니다.)
- 쿼리문에 사용시 NEXTVAL과 함께 사용
- PROCEDURE, FUNCTION에서 사용할 경우 내부에서는 한 세션이기 때문에 쿼리문이 같지 않아도 오류 발생하지 않는다.
더보기
SELECT EMP_SEQ.NEXTVAL
,EMP_SEQ.CURRVAL
FROM DUAL;
시퀀스 수정
ALTER SEQUENCE 시퀀스명 INCREMENT BY 바뀔숫자;
ALTER SEQUENCE 시퀀스명 MAXVALUE 바뀔숫자;
- START WITH(변경불가) 외에는 모두 변경 가능
더보기
ALTER SEQUENCE EMP_SEQ INCREMENT BY 2;
시퀀스 증가값을 2로 변경
ALTER SEQUENCE EMP_SEQ MAXVALUE 99999
시퀀스 최댓값을 99999 변경
SEQUENCE 제거
DROP SEQUENCE 시퀀스명
- 시퀀스 값을 초기화하기 위해서 시퀀스를 삭제 후 다시 생성
출처
https://gent.tistory.com/393
'DB > SQL' 카테고리의 다른 글
SYNONYM 객체 (1) | 2024.01.02 |
---|---|
NVL함수 쿼리 null처리 (0) | 2024.01.02 |
집합쿼리 (0) | 2023.12.29 |
Subquery (0) | 2023.12.28 |
GROUP BY,HAVING절 (1) | 2023.12.27 |