DB Oracle

[Oracle] SEQUENCE 객체

아잠만_ 2024. 3. 29. 15:27

SEQUENCE 객체

CREATE SEQUENCE 시퀀스명
 [START WITH  값]  
 [INCREMENT BY 값] 
 [MAXVALUE 값 | NOMAXVALUE]
 [MINVALUE 값 | NOMINVALUE] 
 [CYCLE | NOCYCLE]
 [CACHE n | NOCACHE]
 [ORDER | NOORDER]
  default 설명
START WITH 값 MINVALUE  시작 값
INCREMENT BY 값 1 증감 값
MAXVALUE 값 | NOMAXVALUE NOMAXVALUE = 10^27 최댓값
MINVALUE 값 | NOMINVALUE NOMINVALUE = 1 최솟값
CYCLE | NOCYCLE NOCYCLE 최대[최소]까지 도달 후 다시 시퀀스 생성 여부 결정
CACHE n | NOCACHE CACHE 20 시퀀스를 캐쉬에 생성해 놓고 사용할지 여부
ORDER | NOORDER NOORDER 요청순서대로 생성 보장여부
  • 자동으로 증가 또는 감소되는 번호를 생성하기 위한 객체
  • 테이블에 독립적
  • 주로 적당한 PK를 선정할 수 없는 경우(ex. 게시판의 게시글번호 등) 사용
  • 지나간 시퀀스 값은 재사용할 수 없다.
  • 중복이 안되어 기본키로 쓸 수 있다

시퀀스는 의사컬럼(Pseudo Column : 시스템에서 제공)을 사용하여 참조 됨

의사 컬럼 내용
시퀀스명.NEXTVAL 시퀀스의 다음 값
시퀀스명.CURRVAL 시퀀스가 가지고 있는 현재 값

 ** 시퀀스가 생성된 후 반드시 NEXTVAL부터 호출되어야 한다 (주소를 참조, 호출 안하면 값을 배정하지 못함(주소값x))
     NEXTVAL이 호출될 때 마다 증감값 만큼 증감됨 (주의)


분류테이블에 다음 자료를 입력하시오

CREATE SEQUENCE seq_lprod_id
    START WITH 10;
INSERT INTO LPROD(LPROD_ID, LPROD_GU, LPROD_NM)
VALUES(seq_lprod_id.NEXTVAL, 'P501', '농산물');

INSERT INTO LPROD(LPROD_ID, LPROD_GU, LPROD_NM)
VALUES(seq_lprod_id.NEXTVAL, 'P502', '임산물');

INSERT INTO LPROD(LPROD_ID, LPROD_GU, LPROD_NM)
VALUES(seq_lprod_id.NEXTVAL, 'P503', '수산물');

SELECT * FROM LPROD;

SELECT seq_lprod_id.CURRVAL FROM DUAL;	--12