백엔드 과정/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값으로 사용 불가

 

 

반응형