본문 바로가기

DataBase/DBMS

12-3.시퀀스 (SEQUENCE)

CREATE SEQUENCE 시퀀스이름;

(DEFAULT 시퀀스값 : 1)

CREATE SEQUENCE 시퀀스이름 START WITH 290 INCREMENT BY 10;

(290부터 10씩 증가)

 

시퀀스.CURRVAL

:현재 시퀀스 값을 볼 수 있다 (SELECT 시퀀스.CURRVAL FROM DUAL)

시퀀스.NEXTVAL

: 주어진 증감 만큼 변화하도록 (기본 DEFAULT 1)

 

RELEASE 할 때,

-SEQUENCE를 새로 설정해서 하거나(1부터 시작하기위해)

-연결해서 하고싶을 경우에는 ROW의 갯수 COUNT하여 +1 하면서 EX) 게시판 번호, 글 번호 같은 것들

 



시퀀스 보충

 

 

주의!

시퀀스 값은 수정하거나 처음부터 다시 할 수 없어서 DROP 해야한다.

어디에서 쓸 때 마다 NEXTVAL은 쓸 때 마다 증가한다.

다시 시작하고 싶으면 SEQUENCE DROP 시키고 다시 해야한다.

호출 될 때마다 중복되지 않은 고유한 숫자를 리턴하는 객체이다

(부를 때마다 숫자가 하나씩 추가 된다거나,, 중복되지 않는 고유의 번호를 준다.)

 

INCREMENT BY 숫자 -증감숫자

START WITH 숫자 -최초시작

MAXVALUE N / NOMAXVALUE -생성 가능한 시퀀스 최대값

MINIVALUE N / NOMINVALUE -cycle일 경우 새로 시작값.

; 감소하는 시퀀스인 경우는 최소값.

CYCLE 시 MINVALUE 값 부터 시작된다.

CACHE N/ NOCACHE

1.시퀀스 생성

CREATE SEQUENCE EMP_SEQ INCREMENT BY 1 START WITH 100 MAXVALUE 9999 NOCACHE

; NOCYCLE;

 

 

SELECT SEQUENCE_NAME, MIN_VALUE, MAX_VALUE, INCREMENT_BY

; FROM USER_SEQUENCES;

 

2. NEXTVAL, CURRVAL

• NEXTVAL

문법 : 시퀀스명.NEXTVAL

- 지정된 시퀀스에서 순차적인 시퀀스 번호를 추출할 때 사용.

위에서 만들었던 시퀀스 설정에 따라 실행된다.

INSERT INTO EMP

; VALUES (EMP_SEQ.NEXTVAL,'홍길동','인사',NULL,SYSDATE, 2500,300,40);

; SELECT * FROM EMP

; WHERE EMPNO=100;

 

• CURRVAL (현재 번호 알기위해서)

• 문법 : 시퀀스명.CURRVAL

- 사용자가 방금 추출한 시퀀스 번호를 참조할 때 사용.

- 반드시 NEXTVAL에 의해서 번호를 추출한 후에 사용해야 한다.

 

 

어디에서 쓸 때 마다 NEXTVAL은 쓸 때 마다 증가한다.

3. 시퀀스 ( SEQUENCE ) 변경 (단 START 값을 초기화하는 것은 안된다.)

: 증분, 최대값, 최소값, 순환여부 , 캐시여부를 변경할 수 있다.

;: 시퀀스가 변경되면 다음 번 시퀀스 번호 추출부터 변경사항이 적용된다.

;: START WITH 옵션은 변경이 불가능하며, 필요시 시퀀스를 삭제하고 재 생성해야 한다.

;: MAXVALUE 값은 현재 시퀀스 번호보다 큰 번호로 지정해야 한다.

 

현재 시퀀스 값보다 큰 값을 입력해 주어야한다.

문법

ALTER SEQUENCE 시퀀스명

INCREMENT BY 숫자

MAXVALUE 숫자

NOCACHE

NOCYCLE;

 

ALTER SEQUENCE EMP_SEQ

; INCREMENT BY 2

; MAXVALUE 10000

; NOCACHE

; NOCYCLE;

;

;INSERT INTO EMP

; VALUES (EMP_SEQ.NEXTVAL,'백길동','인사',NULL,SYSDATE, 5500,300,40);

4.시퀀스 삭제

DROP SEQUENCE 시퀀스명;

게시판 0~100까지(+1) 한 것이 잘 못 되었다.

0~100까지(+2)

다시 하고 싶을 때 DROP.

 

create sequence dept_deptno_seq

; start with 10

; increment by 10

; maxvalue 100

; minvalue 5

; cycle

; nocache;

;

;insert into dept

; values(dept_deptno_seq.nextval,'aaa','seoul');

;select * from dept;