home
자바
home
🚥

11. OBJECT(SEQUENCE)

시퀀스 SEQUENCE

자동으로 번호 발생시켜주는 역할을 하는 객체 정수값을 자동으로 순차적으로 일정값씩 증가시키면서 생성해줌
EX) 회원번호, 사원번호, 학번, ...

1. 시퀀스 객체 생성 구문

[표현법] CREATE SEQUENCE 시퀀스명; [START WITH 시작숫자] --> 처음 발생시킬 시작값 지정 (기본값 1) [INCREMENT BY 숫자] --> 몇씩 증가시킬 건지 (기본값 1) [MAXVALUE 숫자] --> 최대값 지정 (기본값 겁나큼) [MINVALUE 숫자] --> 최소값 지정 (기본값 1) [CYCLE|NOCYCLE] --> 값 순환 여부 지정 (기본값 NOCYCLE) [NOCACHE|CACHE 바이트크기] --> 캐시메모리 할당 (기본값 CACHE 20)
캐시메모리 : 미리 발생될 값들을 생성해서 저장해둠 매번 호출될 때마다 새로이 번호를 생성한는게 아니라 캐시메모리 공간에 미리 생성된 값들을 가져다 쓰게 됨!! 속도가 빠름 접속이 해제되면 => 캐시메모리에 만들어 둔 번호는 날라감
테이블명 : TB_ 시퀀스명 : SEQ_ 뷰명 : VW_ 트리거명 : TRG_
CREATE SEQUENCE SEQ_TEST; -- [참고] 현재 계정이 소유하고 있는 시퀀스들의 구조를 보고자 할 때 SELECT * FROM USER_SEQUENCES; CREATE SEQUENCE SEQ_EMPNO START WITH 300 INCREMENT BY 5 MAXVALUE 310 NOCYCLE NOCACHE;
SQL
복사

2. SEQUENCE 사용 구문

시퀀스명.CURRVAL : 현재 시퀀스의 값 (마지막으로 수행된 NEXTVAL의 값)
시퀀스명.NEXTVAL : 시퀀스값을 증가시켜서 증가된 시퀀스 값 현재 시퀀스 값에서 INCREMENT BY값 만큼 증가된 값 == 시퀀스명.CURRVAL + INCREMENT BY값
SELECT SEQ_EMPNO.CURRVAL FROM DUAL; -- NEXTVAL를 단 한번도 수행하지 않는 이상 CURRVAL를 할 수 없음!! --> 왜? : CURRVAL은 마지막으로 성공적으로 수행된 NEXTVAL의 값을 저장해서 보여주는 임시값 SELECT SEQ_EMPNO.NEXTVAL FROM DUAL; -- 300 SELECT SEQ_EMPNO.CURRVAL FROM DUAL; -- 300 SELECT SEQ_EMPNO.NEXTVAL FROM DUAL; -- 305 SELECT SEQ_EMPNO.NEXTVAL FROM DUAL; -- 310 SELECT * FROM USER_SEQUENCES; SELECT SEQ_EMPNO.NEXTVAL FROM DUAL; --> 지정한 MAXVALUE값을 초과했기 때문에 오류 발생!! (실패!!) SELECT SEQ_EMPNO.CURRVAL FROM DUAL; -- 310
SQL
복사

3. SEQUENCE 구조 변경

[표현법] ALTER SEQUENCCE 시퀀스명 [INCREMENT BY 숫자] [MAXVALUE 최대값] [MINVALUE 최소값] [CYCLE|NOCYCLE] [NOCACHE|CACHE 바이트수]
START WITH는 변경불가 !!
ALTER SEQUENCE SEQ_EMPNO INCREMENT BY 10 MAXVALUE 400; SELECT * FROM USER_SEQUENCES; SELECT SEQ_EMPNO.NEXTVAL FROM DUAL; -- 320 -- SEQUENCE 삭제하기 DROP SEQUENCE SEQ_EMPNO;
SQL
복사
-- 매번 새로운 사번이 발생되게끔 시퀀스 생성 CREATE SEQUENCE SEQ_EID START WITH 300; INSERT INTO EMPLOYEE ( EMP_ID , EMP_NAME , EMP_NO , JOB_CODE , HIRE_DATE ) VALUES ( SEQ_EID.NEXTVAL , '홍길동' , '111111-1111111' , 'J1' , SYSDATE ); INSERT INTO EMPLOYEE(EMP_ID, EMP_NAME, EMP_NO, JOB_CODE, HIRE_DATE) VALUES( SEQ_EID.NEXTVAL, '김말똥', '111111-2222222', 'J2', SYSDATE );
SQL
복사