-
SQL - 시퀀스(SEQUENCE)DataBase/Oracle 2022. 1. 28. 01:26728x90반응형
시퀀스(SEQUENCE) 란?
- 자동 번호 발생기 역할을 하는 객체
- 순차적으로 정수 값을 자동으로 생성해준다.
SEQUENCE 생성
시작 값 : 300, 증가치 : 5, 최댓값 : 310
300 -> 305 -> 310 -> 오류
CREATE SEQUENCE SEQ_EMPID START WITH 300 INCREMENT BY 5 MAXVALUE 310 NOCYCLE NOCACHE;
SEQUENCE 사용
- CURRVAL : 해당 시퀀스가 가지고 있는 CURRENT VALUE (현재 값)
- NEXTVAL : 해당 시퀀스가 가질 다음 값 리턴
- NEXTVAL를 최소 1회 수행해야 CURRVAL를 알아올 수 있다.
- SELECT문에서 사용 가능
- INSERT문 SELECT 구문에서 사용 가능
- INSERT문 VALUES 절에서 사용 가능(게시글 PK로 사용)
- UPDATE문 SET절에서 사용 가능
-- 오류 발생, 최소 1번 NEXTVAL를 수행해야 현재값을 가져올 수 있다. 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.NEXTVAL FROM DUAL; --MAXVALUE를 넘어서면 에러 발생
SEQUENCE 사용 못하는 곳
- 서브쿼리의 SELECT문에서 사용 불가
- VIEW의 SELECT절에서 사용 불가
- DISTINCT 키워드가 있는 SELECT문에서 사용 불가
- GROUP BY, HAVING절이 있는 SELECT문에서 사용 불가
- ORDER BY절에서 사용 불가
- CREATE TABLE, ALTER TABLE의 DEFAULT값으로 사용 불가
SEQUENCE 변경
ALTER SEQUENCE SEQ_EMPID INCREMENT BY 10 MAXVALUE 400 NOCYCLE NOCACHE;
SEQUENCE 사용 예시
CREATE SEQUENCE SEQ_EID START WITH 300 INCREMENT BY 1 MAXVALUE 10000 NOCYCLE NOCACHE; 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, '홍길동', '666666-6666666', 'hong_gd@greedy.com', '01012341234' , 'D2', 'J7', 'S1', 5000000, 0.1 , 200, SYSDATE, NULL, DEFAULT );
728x90반응형'DataBase > Oracle' 카테고리의 다른 글
SQL - 동의어(SYSNONYM) (0) 2022.01.28 SQL - 인덱스(INDEX) (0) 2022.01.28 SQL - VIEW, VIEW 옵션 (0) 2022.01.28 SQL - DDL(Data Definition Language)의 ALTER, DROP (0) 2022.01.27 SQL - TCL (Transaction Control Language) (0) 2022.01.27