백엔드 과정/Oracle(SQL)
[Oracle] Chap11 SEQUENCE
mim
2022. 1. 27. 22:33
반응형
SEQUENCE
자동 번호 발생기 역할을 하는 객체
순차적으로 정수값을 자동으로 생성해줌
보통 PRIMARY KEY 값을 생성하기 위해 사용 한다.
시퀀스 생성
CREATE SEQUENCE 시퀀스이름
[INCREMENT BY 숫자] -- 다음 값에 대한 증가치, 생략하면 자동 1 기본
[START WITH 숫자] -- 처음 발생시킬 값 지정, 생략하면 자동 1 기본
[MAXVALUE 숫자 | NOMAXVALUE] -- 발생시킬 최대값 지정(10의 27승)
[MINVALUE 숫자 | NOMINVALUE] -- 최소값 지정(-10의 26승)
[CYCLE | NOCYCLE] -- 값 순환 여부
[CACHE 바이트크기 | NOCACHE] -- 캐쉬메모리 기본값은 20바이트, 최소는 2바이트
-- 해석 : 300부터 시작해서 5씩 증가하고 최대 310을 넘지않으며, 사이클과 캐시가 없는 시퀀스 생성.
CREATE SEQUENCE SEQ_EMPID
START WITH 300
INCREMENT BY 5
MAXVALUE 310
NOCYCLE
NOCACHE;
시퀀스.CURRVAL
해당 시퀀스가 가지고 있는 CURRENT VALUE (현재 값)
시퀀스.NEXTVAL
해당 시퀀스가 가질 다음 값 리턴
NEXTVAL를 1회 수행해야 CURRVAL를 알아올 수 있다.
SELECT SEQ_EMPID.CURRVAL FROM DUAL;
SELECT SEQ_EMPID.NEXTVAL FROM DUAL; -- 300
SELECT SEQ_EMPID.CURRVAL FROM DUAL; --300
SELECT SEQ_EMPID.NEXTVAL FROM DUAL; -- 305
SELECT SEQ_EMPID.CURRVAL FROM DUAL; --305
SELECT SEQ_EMPID.NEXTVAL FROM DUAL; -- 310
SELECT SEQ_EMPID.CURRVAL FROM DUAL; --310
SELECT SEQ_EMPID.NEXTVAL FROM DUAL; -- MAXVALUE를 넘어서면 에러 발생
데이터 딕셔너리를 통해 만들어진 SEQUENCE 조회
SELECT * FROM USER_SEQUENCES;
시퀀스 변경
START WITH 값은 변경이 불가능 하고,
START WITH 값을 제외하고는 ALTER SEQUENCE 명령어로 수정 할 수 있다.
시퀀스 사용
- SELECT문에서 사용 가능
- INSERT문에서 SELECT 구문 사용 가능
- INSERT문에서 VALUES절에서 사용 가능
- UPDATE문에서 SET절에서 사용 가능
CREATE SEQUENCE SEQ_EID
START WITH 300
INCREMENT BY 1
MAXVALUE 10000
NOCYCLE
NOCACHE;
시퀀스 생성 후 기본키인 EMP_ID를 시퀀스 SEQ_EID로 부여한다.
INSERT
INTO EMPLOYEE A
(
A.EMP_ID, A.EMP_NAME, A.EMP_NO, A.EMAIL, A.PHONE
, A.DEPT_CODE, A.JOB_CODE, A.SAL_LEVEL, A.SALARY, A.BONUS
, A.MANAGER_ID, A.HIRE_DATE, A.ENT_DATE, A.ENT_YN
)
VALUES(
SEQ_EID.NEXTVAL, '유관순', '660606-2112222', 'you123@greedy.com', '01011112222'
, 'D2', 'J7', 'S1', 900000, 0.1
, 200, SYSDATE, NULL, DEFAULT
);
시퀀스를 사용 할 수 없는 예
- 서브쿼리의 SELECT문에서 사용 불가
- VIEW의 SELECT절에서 사용 불가
- DISTINCT 키워드가 있는 SELECT문에서 사용 불가
- GROUP BY, HAVING절이 있는 SELECT문에서 사용불가
- ORDER BY 절에서 사용불가
- CREATE TABLE, ALTER TABLE의 DEAFULT값으로 사용 불가
반응형