--[ 시퀀스 ]
-- 1. 개념 : 순차적으로 정수 값을 자동으로 생성하는 객체( .nextval, .currval )
-- 2. 구문 : 순서 상관 없음.
--CREATE SEQUENCE user_name
--INCREMENT BY n : 시퀀스 번호 증가/감소(default = 1)
--START WITH n : 시퀀스 시작 값(default = 1)
--{MAXVALUE n | NOMAXVALUE} : 시퀀스 최대값, 10^27을 기점으로 사용된다.
--{MINVALUE n | NOMINVALUE| : 시퀀스 최소값, -10^26을 기점으로 사용된다.
--{CYCLE | NOCYCLE| : 최대/최소값에 도달하게 되면 반복 여부를 결정
--{CACHE n | NOCACHE} : 지정한 수량만큼 미리 메모리에 생성 여부를 결정(최소값=2, 기본값=20)
--Q1) 300부터 310번까지 5개씩 증가되는 SEQ_EMPID라는 객체를 만들자.
CREATE SEQUENCE SEQ_EMPID
START WITH 300
INCREMENT BY 5
MAXVALUE 310
NOCYCLE
NOCACHE;
SELECT SEQ_EMPID.NEXTVAL
FROM DUAL;
-- 310이 넘어가면 ERROR : ORA-8004: sequence SEQ_EMPID.NEXTVAL exceeds MAXVALUE and cannot be instantiated
SELECT SEQ_EMPID.CURRVAL -- NEXTVAL이 연동되어야 사용할 수 있다.
FROM DUAL;
--Q2) 5부터 15번까지 5개씩 증가되는 SEQ_EMPID02라는 객체를 만들자.
CREATE SEQUENCE SEQ_EMPID02
START WITH 5 -- START WITH값은 세팅되면 변경할 수 없다.
INCREMENT BY 5
MAXVALUE 15
CYCLE
NOCACHE;
--시퀀스는 수정보다 삭제하고 다시 만드는게 훨씬 빠르다.
SELECT SEQ_EMPID02.NEXTVAL
FROM DUAL;
--5, 10, 15, 1, 6, 11, 1, 6, 11 ...
DESC TEST
SELECT * FROM TEST;
INSERT INTO TEST(COL1) VALUES(SEQ_EMPID02.NEXTVAL);
SELECT SEQ_EMPID02.CURRVAL
FROM DUAL;
SELECT * FROM TEST;
-- # 시퀀스를 수정해보자. 단, 시퀀스는 STRAT WITH는 수정할 수 없다.
--Q3) SEQ_EMPID02의 3씩 증가하면서 10까지 반복하지 않는 시퀀스로 변경해보자.
ALTER SEQUENCE SEQ_EMPID02
INCREMENT BY 3
MAXVALUE 10
NOCYCLE
NOCACHE;
SELECT SEQ_EMPID02.CURRVAL
FROM DUAL;
CREATE SEQUENCE SEQ_01
START WITH 1
INCREMENT BY 3
MAXVALUE 10
NOCYCLE
NOCACHE;
SELECT SEQ_01.NEXTVAL
FROM DUAL;
DESC USER_SEQUENCES;
SELECT * FROM USER_SEQUENCES;
--cf)시퀀스는 STATIC
'K-digital-training > Oracle Database' 카테고리의 다른 글
[ Oracle Database ] 제약조건(Constraints) (0) | 2021.09.06 |
---|---|
[ Oracle Database ] Transaction(트랜잭션) (0) | 2021.09.03 |
[ Oracle Database ] 뷰(VIEW) (0) | 2021.09.02 |
[ Oracle Database ] 수정, 조회, 삭제 (0) | 2021.09.02 |
[ Oracle Database ] 테이블 수정 및 변경 (0) | 2021.09.01 |