본문 바로가기

학원 일기/학원-ORACLE

oracle - sequence

create SEQUENCE 시퀀스명 INCREMENT BY 1 START WITH 1 NOCACHE; 

 

이것이 내가 사용한 시퀀스의 일반적인 생성문이다 그런데 시퀀스를 0으로 초기화해야할 일이생겼고

구글링을 하였더니 해당시퀀스를 바로 0으로 변경하는 방법은없었다 대신

시퀀스의 증가값을 -(음수)로 변경하여 0으로 만든다

그이후 다시 증가값을 1로변경하여 다시 사용하는 방법을 쓴다는 것을 알았다

 

1) select 시퀀스명.nextVal from dual; -> 0으로 만들기위해 해당시퀀스의 값을 조회한다

(조회하는것만으로도 시퀀스의 값이 증가한다)

 

2) alter sequence MainBoard_SEQ increment by -현재시퀀싀의 값;

=>시퀀스의 증가값을 -현재값으로 변경후 1번 사용하여 값을0으로 바꿔줄것이다.

2-1) select 시퀀스명.nextVal from dual;

=> 해당 sql문을 한번더 사용하여 시퀀스의 값을 조회함과 동시에 0으로 바꿔주려고 하였다.

 

 

[ 여기서 생긴 문제점 ]

 

-ora-08004 라는 오류가 발생하였다 

-이오류는 1미만의 값을 가질경우 발생하였고 1부터는 발생하지 않았는데 이럴경우 시퀀스의 초기값이 1이돼고

시퀀스를 통해 얻을수있는 가장 초기의값은 2가 되었다

-시퀀스를 적용할 테이블의 칼럼값은 1부터 증가해야했기에 문제가 되었다.

 

[ 원인 ]

 

해당 시퀀스는 0의 값을 가질수 없는 상태인데 시퀀스를 발동하면 설정한 범위밖의 값을 가지게돼 표현 불가능하다.

 

[ 해결 ] 

 

기존 시퀀스를 삭제한후 MINVALUE 0의 조건을 추가해 다시 생성하였다  그결과 오류없이 문제를 해결 할수 있었다

 

[ 배운점 ]

 

- 시퀀스 생성시 최소값의 기본값은 1이라는것을 알수있었다

- MINVALUE의 속성에대해 알수있었다

 

'학원 일기 > 학원-ORACLE' 카테고리의 다른 글

데이터베이스 14일차  (0) 2021.04.19
db13일차  (0) 2021.04.15
db12일차  (0) 2021.04.14
db11일차  (0) 2021.04.14
db10일차  (0) 2021.04.12