10-2. SEQUENCE

CHOISUJIN·2023년 1월 25일
0
post-thumbnail

📍 SEQUENCE

순차적 번호 자동 발생기 역할의 객체 --> 주로 PK 컬럼에 삽입되는 값을 만드는 용도!

☑️ 작성법

CREATE SEQUENCE 시퀀스 이름
[START WITH 숫자] -- 처음 발생시킬 시작값 지정, 생략하면 자동 1부터 시작(기본값)
[INCREMENT BY 숫자] -- 다음 값에 대한 증가치, 생략하면 자동 1씩 증가(기본값)
[MAXVALUE 숫자 | NOMAXVALUE] -- 발생시킬 최대값 지정(10의 27승 - 1)
[MINVALUE 숫자 | NOMINVALUE] -- 최소값 지정(-10의 26승)
[CYCLE | NOCYCLE(기본값)] -- 값 순환(반복) 여부 지정
[CACHE 바이트크기 | NOCACHE(기본값)] -- 캐시메모리 기본값은 20바이트 최소값은 2바이트
--> 시퀀스의 캐시 메모리는 할당된 크기만큼 미리 다음 값들을 생성해 저장해둠!
시퀀스 호출 시 미리 저장되어진 값들을 가져와 반환하므로 매번 시퀀스를 생성해서 반환하는 것보다 DB속도가 향상됨.

☑️ 사용 방법

  1. 시퀀스명.NEXTVAL : 다음 시퀀스 번호를 얻어옴(INCREMENT BY 만큼 증가된 값)
    단, 시퀀스 생성 후 첫 호출인 경우 START WITH의 값을 얻어옴
  2. 시퀀스명.CURRVAL : 현재 시퀀스 번호 얻어옴
    단, 시퀀스 생성 후 NEXTVAL 호출 없이 CURRVAL를 호출하면 오류 발생
    즉!! 마지막 NEXTVAL 호출값을 다시 보여주는 기능!!
CREATE TABLE EMP_TEMP
AS SELECT EMP_ID, EMP_NAME FROM EMPLOYEE;

SELECT * FROM EMP_TEMP;

-- 223번부터 10씩 증가하는 시퀀스 생성
CREATE SEQUENCE SEQ_TEMP
START WITH 223
INCREMENT BY 10;

-- EMP_TEMP 테이블에 사원 정보 삽입
INSERT INTO EMP_TEMP VALUES(SEQ_TEMP.NEXTVAL, '홍길동'); -- 223 홍길동
INSERT INTO EMP_TEMP VALUES(SEQ_TEMP.NEXTVAL, '고길동'); -- 233 고길동
INSERT INTO EMP_TEMP VALUES(SEQ_TEMP.NEXTVAL, '김길동'); -- 243 김길동

-- EMP_ID PK 제약조건 설정
ALTER TABLE EMP_TEMP 
MODIFY EMP_ID PRIMARY KEY;

INSERT INTO EMP_TEMP VALUES(SEQ_TEMP.CURRVAL, '고길동'); -- PK 위배

☑️ SEQUENCE 수정

ALTER SEQUENCE 시퀀스 이름
[INCREMENT BY 숫자][MAXVALUE 숫자 | NOMAXVALUE]
[MINVALUE 숫자 | NOMINVALUE][CYCLE | NOCYCLE]
[CACHE 바이트크기 | NOCACHE]

ALTER SEQUENCE SEQ_TEMP
INCREMENT BY 1;

☑️ 테이블, 뷰, 시퀀스 삭제

DROP TABLE EMP_TEMP; 
DROP VIEW V_DCOPY2; 
DROP SEQUENCE SEQ_TEMP;
profile
매일매일 머리 터지는 중 ᕙ(•̀‸•́‶)ᕗ

0개의 댓글