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 |
댓글