프로그래밍/SQL_Oracle

10_OracleDB SQL : SEQUENCE (시퀀스생성 및 삭제, NEXTBAL , CURRVAR 사용)

pupu91 2022. 7. 20. 12:00
반응형

SEQUENCE(시퀀스)

 

자동 번호 발생기 역할을 하는 객체

순차적으로 정수 값을 자동으로 생성해줌

적합한 PK가 없을때 사용

 

 


 

1 . 작성 방법

[기본문법]
CREATE SEQUENCE 시퀀스명

[옵션]
INCREMENT BY 숫자
: 다음 값에 대한 증가치, 생략하면 자동 1 기본

START WITH 숫자 
: 처음 발생시킬 값 지정, 생략하면 자동 1 기본

MAXVALUE 숫자 | NOMAXVALUE 
:  발생시킬 최대 값 지정(10의 27승)

MINVALUE 숫자 | NOMINVALUE
:  최소값 지정(-10의 26승)

CYCLE | NOCYCLE
:  값 순환 여부

CACHE 바이트크기 | NOCACHE
: 캐쉬메모리 기본 값은 20바이트, 최소는 2바이트

 

 

 

 

2. 시퀀스 생성

CREATE SEQUENCE SEQ_EMPID
START WITH 300
INCREMENT BY 5
MAXVALUE 310
NOCYCLE
NOCACHE;

 

 

 

3. NEXTBAL / CURRVAR 

시퀀스명.CURRVAL 
: 해당 시퀀스가 가지고 있는 CURRENT VALUE(현재 값)

시퀀스명.NEXTVAL
: 해당 시퀀스가 가질 다음 값 리턴

NEXTVAL를 1회 수행해야 CURRVAL를 알 수 있음!

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를 넘어서면 에러 발생

 

 

 

4. NEXTBAL / CURRVAR 사용 가능 여부

 

 

5. 데이터 딕셔너리를 통해 만들어진 SEQUENCE 조회 가능

 

SELECT * FROM USER_SEQUENCES;

 

 

 

 

6. ALTER 사용하여 시퀀스 변경 가능

  • START WITH 값은 변경이 불가능하므로 해당 값을 변경하려면 DROP으로 삭제 후 다시 생성해야 함.
ALTER SEQUENCE SEQ_EMPID
INCREMENT BY 10
MAXVALUE 400
NOCYCLE
NOCACHE;

 

 

 

7. INSERT 에 사용하기

CREATE SEQUENCE SEQ_EID
START WITH 300
INCREMENT BY 1
MAXVALUE 10000
NOCYCLE
NOCACHE;

INSERT
  INTO EMPLOYEE
(
  EMP_ID, EMP_NAME, EMP_NO, EMAIL, PHONE
, DEPT_CODE, JOB_CODE, SAL_LEVEL, SALARY, BONUS
, MANAGER_ID, HIRE_DATE, ENT_DATE, ENT_YN
)
VALUES
(
  SEQ_EID.NEXTVAL, '홍길동', '660101-1111111', 'hong_gd@greedy.com', '01012345678'
, 'D2', 'J7', 'S1', 5000000, 0.1
, 200, SYSDATE, NULL, DEFAULT
);

 

 

 

8. 시퀀스 삭제

DROP SEQUENCE SEQ_EMPID;

 

반응형