국비/Oracle
[05-3] Oracle OBJECT(SEQUENCE)
제발 취업하게 해주세요
2022. 5. 9. 21:00
시퀀스 SEQUENCE |
자동으로 번호를 발생시키는 역할을 하는 객체 정수값을 자동으로 순차적으로 생성해줌 예) 회원번호, 사번, 게시글번호 등등... 채번할 때 사용 INSERT INTO MEMBER VALUES(1, 'USER01', 'PASS01', ....) INSERT INTO MEMBER VALUES(2, 'USER02', 'PASS02', ....) INSERT INTO MEMBER VALUES(3, 'USER03', 'PASS03', ....) ... INSERT INTO MEMBER VALUES(123489, 'USER01', 'PASS01', ....) INSERT INTO MEMBER VALUES(123490, 'USER01', 'PASS01', ....) |
시퀀스 객체 생성구문 |
CREATE SEQUENCE 시퀀스명 START WITH 시작숫자 => 생략가능, 처음 발생시킬 시작값 지정 INCREMENT BY 증가값 => 생략가능, 몇 씩 증가시킬건지 지정 MAXVALUE => 생략가능, 최대값 지정 MINVALUE => 생략가능, 최소값 지정 CYCLE / NOCYCLE => 생략가능, 값 순환여부 CACHE 바이트크기/NOCACHE => 생략가능, 캐시메모리 쓸거니? 기본값은 20BYTE * SEQUENCE CACHE MEMORY : 미리 발생할 값들을 생성해서 저장해두는 공간 매번 호출할 때 새로 번호를 생성하는 건 비효율적이니 캐시메모리 공간에 미리 생성된 값들을 가져다 쓰게해서 속도를 높임 |
* 접두사, 접미사 - 테이블명 : TB_ - 뷰명 : VW_ - 시퀀스 : SEQ_ |
CREATE SEQUENCE SEQ_EMPNO
START WITH 300 -- 시작값
INCREMENT BY 5 -- 증가값
MAXVALUE 310 -- 최대값
NOCYCLE -- 안돌려
NOCACHE; -- 캐시안써
시퀀스 사용 구문 |
시퀀스명.CURRVAL : 현재 시퀀스 값(마지막으로 성공적으로 발생된 NEXTVAL값) 시퀀스명.NEXTVAL : 시퀀스값을 증가시키고 증가된 시퀀스의 값 기존의 시퀀스값에서 INCREMENT BY 값만큼 증가된 값 (시퀀스명.CURRVAL + INCREMENT BY값) |
SELECT SEQ_EMPNO.CURRVAL FROM DUAL;
--> NEXTVAL을 한번이라도 수행하지 않는 이상 CURRVAL을 수행할 수 없음
SELECT * FROM USER_SEQUENCES;
SELECT SEQ_EMPNO.NEXTVAL FROM DUAL;
-- LAST_NUMBER : 현재 상황에서 NEXTVAL을 실행할 경우 예정 값
SELECT SEQ_EMPNO.CURRVAL FROM DUAL; --300
SELECT SEQ_EMPNO.CURRVAL FROM DUAL; --305
-- 마지막으로 성공적으로 수행된 NEXTVAL의 값
시퀀스 변경 |
[ 표현법 ] ALTER SEQUENCE 시퀀스명 INCREMENT BY 증가값 MAXVALUE 최대값 MINVALUE 최소값 CYCLE/NOCYCLE CACHE 바이트크기 / NOCACHE * START WITH는 변경 불가 |
ALTER SEQUENCE SEQ_EMPNO
INCREMENT BY 10
MAXVALUE 400;
SELECT SEQ_EMPNO.CURRVAL FROM DUAL; --305
SELECT SEQ_EMPNO.NEXTVAL FROM DUAL; --315