본문 바로가기
개발/Oracle

Oracle - Sequence 사용하기

by 코딩하는 흰둥이 2024. 11. 26.

 

Sequence 는 고유의 숫자값을 자동으로 증가 또는 감소 하는 값을 생성하는 데이터베이스 객체다

 

Sequence 로 생성된 값은 고유한 값으로 중복되지 않고,

동시에 값을 요청해도 중복되지 않는 값을 제공한다는 장점을 가지고 있다

 

 

 

Sequence 생성하기
CREATE SEQUENCE TEST_SEQ	-- 시퀀스명
       INCREMENT BY 1		-- 양수로 설정하면 증가 또는 음수로 설정하면 감소 값으로 DEFAULT 는 1 이다
                                -- 1이면 1씩 증가 , -1이면 1씩 감소 // 2면 2씩 증가 , -2면 2씩 감소 .....
       
       START WITH 1	        -- 시퀀스가 시작하는 초기값으로 DEFAULT 는 1 이다
                                -- 1이면 1부터 시작 , 10이면 10부터 시작
       
       MINVALUE 1               -- 시퀀스가 생성하는 최솟값이다
                                -- 기본적으로 1이 최솟값이지만 음수(-1)로도 지정 가능하다
       
       MAXVALUE 9999		-- 시퀀스가 생성할 수 있는 최댓값이고 DEFAULT는 NO MAXVALUE 로 설정하면 무제한으로 생성가능 하다
                                -- 9999이면 최댓값이 9999 이며 NO MAXVALUE 이면 제한이 없다
       
       CYCLE/NOCYCLE            -- 최댓값 도달하면 다시 최솟값부터 시작할지 설정한다 
                                -- CYCLE(반복함) / NOCYCLE(반복하지않음)
       
       CACHE/NOCACHE		-- 시퀀스 값을 미리 메모리에 저장할지 설정한다
                                -- CACHE(사용함) / NOCACHE(사용하지않음)
                                -- CACHE 10 이면 10개의 값을 미리 캐시에 저장, 100이면 100개의 값을 미리 캐시에 저장한다
       
       ORDER/NOORDER		-- 요청 순서대로 값을 생성할지 설정한다
                                -- ORDER(순서대로 생성) / NOORDER(순서대로 생성 보장 하지않음)

 

 

 

 

CREATE SEQUENCE board_seq	-- 시퀀스명
       INCREMENT BY 1		-- 증가값
       START WITH 1		-- 시작값
       MINVALUE 1		-- 최솟값
       MAXVALUE 9999		-- 최댓값
       NOCYCLE			-- 최댓값 도달하면 다시 반복안함 , CYCLE(반복함)
       NOCACHE			-- Cache 사용 여부 , CACHE(사용함)
       NOORDER			-- 요청 순서대로 값을 생성 여부 , ORDER(순서대로 생성)

 

JPA 에서 GenerationType.SEQUENCE

사용하려고 만들었던 Sequence 구문이다

 

 

 

Sequence 사용하기
      시퀀스명.CURRVAL	-- 마지막으로 생성된 시퀀스값을 반환한다
                        -- NEXTVAL 을 호출한 뒤 부터 사용할 수 있다
      
      시퀀스명.NEXTVAL 	-- 시퀀스의 다음 값을 생성한다

 

Sequence 를 생성하고서 바로

SELECT TEST_SEQ.CURRVAL FROM DUAL ; 을 사용하게 되면

 

이런 오류를 접할 수 있다

생성된 값이 없어서 나는 오류다

 

 

 

NEXTVAL 을 실행하고 CURRVAL 을 실행하면 정상적으로 동작한다

 

 

     INSERT INTO BOARD(
                        NO,
                        TITLE) 
     VALUES(
    			TEST_SEQ.NEXTVAL , 
    			'시퀀스 INSERT 테스트 ' );

 

INSERT 할 때 PK 값을 Sequence 로 생성시킨다

 

 

 

 

 

TEST 로 NEXTVAL 을 실행시킨 뒤에 INSERT 를 진행하여

2 라는 증가값이 저장된 것을 확인할 수 있다

 

 

 

 

 

 

Sequence 수정하기

 

   ALTER SEQUENCE TEST_SEQ	-- 시퀀스명
       INCREMENT BY 1		-- 증가값
       MINVALUE 1		-- 최솟값
       MAXVALUE 9999		-- 최댓값
       NOCYCLE			-- 최댓값 도달하면 다시 반복안함 , CYCLE(반복함)
       NOCACHE			-- Cache 사용 여부 , CACHE(사용함)
       NOORDER			-- 요청 순서대로 값을 생성 여부 , ORDER(순서대로 생성)

 

수정에는 ALTER 를 사용한다

START WITH 의 시작값은 수정할 수 없으며,

수정을 하기 위해서는 새로 생성해야 한다

 

 

    ALTER SEQUENCE TEST_SEQ	-- 시퀀스명
       INCREMENT BY 2		-- 증가값
       MINVALUE 1		-- 최솟값
       MAXVALUE 10		-- 최댓값

 

이렇게 Sequence 를 수정하고 INSERT 를 진행해 보겠다

 

 

 

현재 NO 의 값은 2 이며

Sequence 를 수정하여 2씩 증가, 최댓값은 10, NOCYCLE 은 그대로이다

 

 

 

INSERT 를 4번 실행시켰을 때 

NO 는 2씩 증가하여 10 까지 저장된 것을 확인할 수 있다

최댓값 제한이 10까지인 상태에서 한번 더 INSERT 를 진행해 보자

 

 

최댓값을 초과하여 값을 생성할 수 없다고 한다

ALTER 수정이 제대로 되었다

 

 

 

 

 

Sequence 삭제하기
DROP SEQUENCE 시퀀스명;

 

Sequnece 도 TABLE 처럼 DROP 으로 삭제를 진행한다

 

 

 

 

 

 

삭제되어 NEXTVAL실행되지 않는다

 

 

 

'개발 > Oracle' 카테고리의 다른 글

Oracle - Procedure 사용하기  (1) 2024.11.27
Oracle - NVL , NVL2 함수 사용  (0) 2024.09.26
Oracle - 계층형 쿼리  (0) 2024.07.31
Oracle - INTERSECT  (0) 2023.03.23
[DBeaver] Oracle - LEFT , RIGHT Join  (4) 2023.03.19

댓글