생각하는 감쟈
[Oracle] SQL 객체_02 : SEQUENCE 본문
SEQUENCE 객체
- 자동으로 증가 또는 감소되는 번호를 생성하기 위한 객체
- 테이블에 독립적
- 주로 적당한 PK를 선정할 수 없는 경우 (ex. 게시판의 게시글 번호 등) 사용
- 지나간 시퀀스는 값은 재 사용할 수 없다.
(사용형식)
CREATE SEQUENCE 시퀀스명
[START WITH 값] - 시작 값, 기본값 MINVALUE
[INCREMENT BY 값] - {+}증가/{-}감소 값 기본은 1
[MAXVALUE 값 | NOMAXVALUE] - 최대 값 NOMAXVALUE 가 DEFAULT 이며 10^27
[MINVALUE 값 | NOMINVALUE] - 최소 값 NOMINVALUE 가 DEFAULT 이며 1임
[CYCLE | NOCYCLE] - DEFAULT 는 NOCYCLE 이며 최대[최소]까지 도달 후 다시 시퀀스 생성 여부 결정
[CACHE n | NOCACHE} - 시퀀스를 캐쉬에 생성해 놓고 사용할지 여부 DEFAULT 는 CACHE 20
{ORDER | NOORDER] - 요청순서대로 생성 보장여부 DEFAULT 는 NOORDER
-- 테이블이랑 독립적
-- 시퀀스는 의사컬럼(Pseudo Column: 시스템에서 제공) 을 사용하여 참조 됨
-----------------------------------------------
의사컬럼 내용
-----------------------------------------------
시퀀스명.NEXTVAL 시퀀스의 다음 값
시퀀스명.CURRVAL 시퀀스가 가지고 있는 현재 값
-----------------------------------------------
**** 시퀀스가 생성된 수 반드시 NEXTVAL 부터 호출되어야 한다
NEXTVAL 이 호출될 때마다 증감값 만큼 증감됨(주의)
사용예) 분류테이블에 다음 자료를 입력하시오
--------------------------------------------
컬럼 값
--------------------------------------------
LPROD_ID 10부터 증다되는 값(시퀀스 이용)
LPROD_GU 'P502'
LPROD_NM '농산물'
INSERT INTO LPROD(LPROD_ID,LPROD_GU,LPROD_NM)
VALUES (seq_lprod_id.NEXTVAL,'P501','농산물');
SELECT * FROM LPROD;
--------------------------------------------
LPROD_ID 11
LPROD_GU 'P502'
LPROD_NM '임산물'
INSERT INTO LPROD(LPROD_ID,LPROD_GU,LPROD_NM)
VALUES (seq_lprod_id.NEXTVAL,'P502','임산물');
SELECT * FROM LPROD;
--------------------------------------------
LPROD_ID 12
LPROD_GU 'P503'
LPROD_NM '수산물'
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; --시퀀스의 현재의 값
-- CURRVLA / NEXTVAL
-- 한번 지나간 시퀀스 값을 돌아갈수 없음
-- DROP 시퀀스 후 다시 시작값 부여 하고 해야 함
'Language > Oracle' 카테고리의 다른 글
[Oracle] SQL 객체_04 : INDEX (0) | 2024.04.01 |
---|---|
[Oracle] SQL 객체_03 : SYNONYM (0) | 2024.03.29 |
[Oracle] SQL 객체_01 : VIEW (1) | 2024.03.29 |
[Oracle] SQL 집합 연산자 (0) | 2024.03.29 |
[Oracle] SQL 서브 쿼리_03 : SUBQUERY 사용한 DELETE (0) | 2024.03.28 |
Comments