Database/Oracle

[SQL-Oracle]시퀀스(SEQUENCE)

sukii 2023. 12. 7. 13:57
반응형

오라클 12C 버전 이상부터는 IDENTITY 기능으로 SEQUENCE가 자동으로 생성되게끔 할 수 있으나, 그 전까지는 SEQUENCE를 사용하여 수동으로 만들어줬어야함.

('IDENTITY 기능' 클릭하면 그에 대한 포스팅으로 이동함)

 

시퀀스(SEQUENCE) : 숫자값(정수값)을 저장하는 객체 - 저장된 숫자값을 사용하여 자동 증가되는 숫자값을 제공

=> 시퀀스에 저장된 숫자값에서 증가된 값(자동 증가값)을 제공받아 행을 삽입할 때 컬럼값으로 사용하기 위한 객체

🔘시퀀스 생성
형식) CREATE SEQUENCE 시퀀스명 [START WITH 초기값] [INCREMENT BY 증가값] [MAXVALUE 최대값] [MINVALUE 최소값]  [{CYCLE|NOCYCLE}] [CACHE 갯수]
--START WITH 초기값 : 시퀀스에 저장될 초기값 초기값 설정 - 생략 시 : NULL
--INCREMENT BY 증가값 : 시퀸스에 저장된 숫자값이 증가되는 숫자값 설정 - 생략 시  : 1
--MAXVALUE 최대값 : 시퀀스에 저장 가능한 최대값 설정 - 생략 시  : 오라클에서 숫지값으로 표현 가능한 최대값
--MINVALUE 최대값 : 시퀀스에 저장 가능한 최소값 설정 - 생략 시  : 1
--CYCLE : 시퀀스에 저장된 숫자값이 최대값을 초과할 경우 최소값부터 다시 저장되도록 반복하는 기능을 제공 

                 - 생략 시 : NOCYCLE
--CACHE 갯수 : 임의의 저장공간에 자동 증가값을 미리 생성하여 제공할 수 있는 갯수 설정 - 생략 시  : 20

 

예제👩‍💻

--BOARD3 테이블 생성 - 글번호(숫자형-PRIMARY KEY),작성자(문자형),내용(문자형)
CREATE TABLE BOARD3(NO NUMBER CONSTRAINT BOARD3_NO_PK PRIMARY KEY, WRITER VARCHAR2(50), CONTENT VARCHAR2(1000));

--B0ARD3_SEQ 시퀀스 생성 - BOARD3 테이블의 NO 컬럼에 저장된 숫자값을 제공하기 위한 시퀀스
CREATE SEQUENCE BOARD3_SEQ;

--시퀀스 확인 - USER_SEQUSENCES : 시퀀스 정보를 제공하는 딕셔너리
SELECT SEQUENCE_NAME, MAX_VALUE, MIN_VALUE, INCREMENT_BY FROM USER_SEQUENCES;

--시퀀스에 저장된 숫자값 확인
--형식) 시퀀스명.CURRVAL
SELECT BOARD3_SEQ.CURRVAL FROM DUAL;--시퀀스에 NULL이 저장되어 있어 에러 발생

--시퀀스에 저장된 숫자값에 증가값을 더한 결과값 제공 - 결과값으로 시퀀스에 저장된 숫자값 자동 변경
--시퀀스에 NULL이 존재하는 경우 시퀀스의 최소값을 제공하고 시퀀스의 저장값 변경 처리
--형식) 시퀀스명.NEXTVAL
SELECT BOARD3_SEQ.NEXTVAL FROM DUAL;--시퀀스명.NEXTVAL 기능으로 자동 증가된 숫자값을 제공
SELECT BOARD3_SEQ.CURRVAL FROM DUAL;
SELECT BOARD3_SEQ.NEXTVAL FROM DUAL;
SELECT BOARD3_SEQ.CURRVAL FROM DUAL;

--BOARD3 테이블에 행 삽입 - NO 컬럼에는 BOARD3_SEQ 시퀀스의 다음값을 제공받아 저장
INSERT INTO BOARD3 VALUES(BOARD3_SEQ.NEXTVAL,'홍길동','첫번째 게시글입니다.');
INSERT INTO BOARD3 VALUES(BOARD3_SEQ.NEXTVAL,'임꺽정','두번째 게시글입니다.');
INSERT INTO BOARD3 VALUES(BOARD3_SEQ.NEXTVAL,'전우치','세번째 게시글입니다.');
SELECT * FROM BOARD3;
COMMIT;

 

 

🔘시퀀스 변경
형식) ALTER SEQUENCE 시퀀스명 {MAXVALUE|MINVALUE|INCREMENT BY} 변경값

 

예제👩‍💻

--BOARD3_SEQ 시퀀스의 최대값 9999로 변경하고 증가값가 3으로 변경
SELECT SEQUENCE_NAME,MAX_VALUE,MIN_VALUE,INCREMENT_BY FROM USER_SEQUENCES;
ALTER SEQUENCE BOARD3_SEQ MAXVALUE 9999 INCREMENT BY 3;
SELECT SEQUENCE_NAME,MAX_VALUE,MIN_VALUE,INCREMENT_BY FROM USER_SEQUENCES;

--BOARD3 테이블에 행 삽입 - NO 컬럼에는 BOARD3_SEQ 시퀸스의 다음값을 제공받아 저장
INSERT INTO BOARD3 VALUES(BOARD3_SEQ.NEXTVAL,'일지매','네번째 게시글입니다.');
SELECT * FROM BOARD3;
COMMIT;

 

 

🔘 시퀀스 삭제
형식) DROP SEQUENCE 시퀀스명

=>시작값을 다시 1로 바꾸고 싶을 때 사용

시퀀스를 한번 사용하면 중간에 1로 다시 돌릴 수 없음

 

예제👩‍💻

--BOARD3_SEQ 시퀀스 삭제
DROP SEQUENCE BOARD3_SEQ;
SELECT SEQUENCE_NAME,MAX_VALUE,MIN_VALUE,INCREMENT_BY FROM USER_SEQUENCES;

 

 

반응형