오라클 SEQUENCE 객체

최주영·2023년 4월 12일
0

오라클

목록 보기
19/22

[구디아카데미]

✅ SEQUENCE

  • 자동번호 발급해주는 객체
  • SEQEUNCE는 중복되지 않는 숫자를 발급해주기 때문에 테이블의 PK컬럼의 값으로 많이 사용
  • CREATE SEQUENCE 시퀀스 이름 [옵션들];
  • NEXTVAL 로 무조건 먼저 발급 후에 CURRVAL로 확인한다!
CREATE SEQUENCE SEQ_BASIC; // SEQUENCE 객체 하나 생성
SELECT SEQ_BASIC.NEXTVAL FROM DUAL; // 시퀀스명.NEXTVAL : 번호를 차례대로 부여

//현재 SEQUENCE 값을 확인하기
// 시퀀명.CURRVAL를 이용한다
SELECT SEQ_BASIC.CURRVAL FROM DUAL;

CREATE TABLE ATTACHMENT(  // 첨부파일 테이블을 하나 생성
    ATTACH_NO NUMBER PRIMARY KEY,
    BOARD_REF NUMBER REFERENCES BOARD(BOARD_NO),
    FILENAME VARCHAR2(200) NOT NULL
);

// 게시물 테이블에는 기본키에 순차적으로 번호를 넣도록 함
INSERT INTO BOARD VALUES(SEQ_BASIC.NEXTVAL,'첨부파일게시글','첨부파일있다','유병승',SYSDATE);
// 첨부파일 테이블에는 CURRVAL을 이용해서 값을 받도록 한다 
// 현재 테이블관계에서 SEQ_BASIC.CURRVAL가 SEQ_BASIC.NEXTVAL를 참조한다
INSERT INTO ATTACHMENT VALUES(1,SEQ_BASIC.CURRVAL,'내사진.PNG');
INSERT INTO ATTACHMENT VALUES(2,SEQ_BASIC.CURRVAL,'내사진2.PNG');

✅ SEQUENCE 옵션값 활용

  • START WITH 숫자
    -> 설정한 숫자부터 시작 (DEFAULT 값이 1임)
  • INCREMENT BY 숫자
    -> 증가하는 간격을 의미 (DEFAULT 값이 1임)
  • MAXVALUE 숫자
    -> 최대값을 설정
  • MINVALUE 숫자
    -> 최소값을 설정
  • CYCLE / NOCYCLE
    -> 번호를 순환할지 말지 결정하는 것
    -> (MAXVALUE, MINVALUE)가 필수로 설정되어있어야 함
  • CACHE
    -> 미리 번호를 생성하는 기능 (DEFAULT 값이 20번 생성함)
CREATE SEQUENCE SEQ_01  // 100부터 시작하는 SEQUENCE 객체 생성
START WITH 100; 

CREATE SEQUENCE SEQ_02 // 100부터 시작하고 10씩 증가하는 SEQUENCE 객체 생성
START WITH 100
INCREMENT BY 10;

CREATE SEQUENCE SEQ_03 // 100부터 시작하고 50씩 감소하며 최대값이 200, 최소값이 0인 SEQUENCE 객체 생성 
START WITH 100  // 계속 실행하여 0보다 작아지면 오류남!  (최소값이 0까지표현 가능하기 때문에)
INCREMENT BY -50
MAXVALUE 200
MINVALUE 0;

CREATE SEQUENCE SEQ_04 // 100부터 시작하고 50씩 증가하며 최소값 표현이 0 최대값 표현이 200이며
START WITH 100 // 50씩 증가하다 값이 200이 넘으면 다시 0으로 순환 하는 SEQUENCE 객체 생성
INCREMENT BY 50 
MAXVALUE 200 
MINVALUE 0
CYCLE
NOCACHE; // 순환하지 않고 50씩 증가하면 한번에 20개의 값을 표현할 수 없기 때문에 NOCACHE로 지정  
// 50 100 150 200 -> 4개까지만 미리 번호 생성 가능!
  • 문자열과 SEQUENCE에 값을 추가하여 PK 값 만들기!
    -> ex) P_001, M_001
SELECT 'P_'||TO_CHAR(SEQ_05.NEXTVAL,'0000') FROM DUAL;
profile
우측 상단 햇님모양 클릭하셔서 무조건 야간모드로 봐주세요!!

0개의 댓글