-
/* SEQUENCE (순서, 연속) - 순차적으로 일정한 간격의 숫자(번호)를 발생시키는 객체 (자동번호생성기) PK 가 지정된 컬럼에 삽입될 값을 생성할 때 SEQUENCE 를 이용하면 좋음 Ex) 1번째 회원,2번째 회원,3번째 회원, ..., N번째 회원 [작성법] CREATE SEQUENCE 시퀀스이름 [START WITH 숫자] -- 처음 발생시킬 시작값 지정, 생략하면 자동으로 1 이 기본값으로 설정 [INCREAMENT BY 숫자] -- 다음 값에 대한 증가값을 설정, 생략하면 자동으로 1 씩 증가로 설정 [MAXVALUE 숫자 | NOMAXVALUE] -- 발생시킬 최대값 지정 Ex) 최대 1000 명만 기록하겠다. [MINVALUE 숫자 | NOMINVALUE] -- 발생시킬 최소값 지정 Ex) 최소 21 번 부터 다시 시작하겠다. [CYCLE | NOCYCLE] -- 값 순환 여부 지정 [CACHE 바이트크기 | NOCACHE] -- 캐쉬 메모리 기본값은 20BYTE 최소값은 2BYTE --> SEQUENCE 의 캐쉬 메모리는 할당된 크기만큼 미리 다음 값을 생성해 저장해줌 --> SEQUENCE 호출 시 미리 저장되어진 값들을 가져와 반환하므로 매번 SEQUENCE 를 생성해서 반환하는 것 보다 DB 속도 향상 *** 사용 방법 시퀀스명.NEXTVAL : 다음 시퀀스 번호를 얻어옴 시퀀스명.CURRVAL : 현재 시퀀스 번호를 얻어옴 주의할 점 : 시퀀스가 생성되자마자 호출할 경우 오류 발생 --> 마지막으로 호출한 NEXTVAL 값 반환 */ -- 시퀀스 생성 (1. TB_TEST 테이블 생성 2. SEQ_TEST_NO 시퀀스 생성) CREATE TABLE TB_TEST ( TEST_NO NUMBER PRIMARY KEY, -- ORACLE 에서 지정한 최대 값 설정 NUMBER 뒤에 안쓸 경우 38 자리가 됨 TEST_NAME VARCHAR2(30) NOT NULL ); CREATE SEQUENCE SEQ_TEST_NO START WITH 100 -- 시작번호가 100 INCREMENT BY 5 -- NEXTVAL 호출 마다 5 씩 증가 MAXVALUE 150 -- 증가 가능한 최대 값 150 NOMINVALUE -- 최소값 없음 NOCYCLE -- 반복 X NOCACHE -- 미리 생성해두는 시퀀스 번호 없음 ; -- 위 작성된 내용중 START 부터 NOCACHE 까지 모두 생략 가능 -- SQL 에서 설정한 기본값이 자동으로 매겨짐 -- TB_TEST 테이블 INSERT 시 시퀀스 사용하기 INSERT INTO TB_TEST VALUES (SEQ_TEST_NO.NEXTVAL, '홍길동'); SELECT * FROM TB_TEST; INSERT INTO TB_TEST VALUES (SEQ_TEST_NO.NEXTVAL, '김영희'); INSERT INTO TB_TEST VALUES (SEQ_TEST_NO.NEXTVAL, '박철수'); /* -- 시퀀스 값 변경 (ALTER) --> CREATE 구문과 똑같지만 START WITH 옵션 제외됨 ALTER SEQUENCE 시퀀스이름 [INCREAMENT BY 숫자] -- 다음 값에 대한 증가값을 설정, 생략하면 자동으로 1 씩 증가로 설정 [MAXVALUE 숫자 | NOMAXVALUE] -- 발생시킬 최대값 지정 Ex) 최대 1000 명만 기록하겠다. [MINVALUE 숫자 | NOMINVALUE] -- 발생시킬 최소값 지정 Ex) 최소 21 번 부터 다시 시작하겠다. [CYCLE | NOCYCLE] -- 값 순환 여부 지정 [CACHE 바이트크기 | NOCACHE] -- 캐쉬 메모리 기본값은 20BYTE 최소값은 2BYTE */ -- SEQ_TEST_NO 시퀀스에서 최대값 200 으로 변경 ALTER SEQUENCE SEQ_TEST_NO MAXVALUE 200;