시퀀스 - 24.09.20

수호천사임다·2024년 9월 20일

오라클

목록 보기
35/53

시퀀스란(sequence)

  • 자동적으로 유일 번호를 생성
  • 공유 가능한 객체
  • 주로 기본 키 값을 생성하기 위해 사용(시퀀스 값을 기본키 값으로 사용)
  • 메모리에 캐쉬되면 시퀀스 값을 액세스 하는 효율성을 향상
  • 트랜잭션의 커밋 또는 롤백과 상관없이 시퀀스는 증가한다.
  • 12C 이상부터는 테이블 생성시 DEFAULT 값으로 시퀀스 값을 할당 할 수 있다.(오라클에서는 DEFAULT 안 주는것이 좋다)
  • 게시판, 공지사항, 방명록(기본키를 만들 컬럼이 없다)
  • 시퀀스 자체가 객체, ROLLBACK, COMMIT가 상관없이 생성시 값이 무조건 증가
  • 권한이 없으면 시퀀스를 생성하지 못함(테이블을 만들 수 있으면 시퀀스를 만들 수 있다. 단 VIEW는 안됨)

👉 시퀀스 생성

CREATE SEQUENCE 시퀀스명
START WITH 시작값
INCREMENT BY 증가값
[ MINVALUE 최소값 | NOMINVALUE ]
[ MAXVALUE 최대값 | NOMAXVALUE ]
[ CYCLE | NOCYCLE ]
[ CACHE 캐시값 | NOCACHE ];

CREATE SEQUENCE depts_seq
    INCREMENT BY 1
    START WITH 91
    MAXVALUE 100
    NOCACHE
    NOCYCLE;

START WITH: 시퀀스가 생성된 후 처음으로 반환할 값을 지정(기본값 1)
INCREMENT BY: 시퀀스 값이 증가하는 단위를 지정 수면 증가, 음수면 감소. (기본값은 1)
MINVALUE: 시퀀스가 가질 수 있는 최소값을 지정.
MAXVALUE: 시퀀스가 가질 수 있는 최대값을 지정.
CYCLE: 시퀀스가 최대값에 도달한 후 다시 시작값으로 돌아가도록 한다. NOCYCLE이면 최대값에 도달하면 더 이상 값을 생성하지 않는다.
CACHE: 메모리에 미리 시퀀스 값을 캐싱하여 성능을 향상시킨다. 기본값은 20이다. NOCACHE로 설정하면 캐싱 없이 시퀀스를 생성한다.

CREATE SEQUENCE test_seq; -- 시퀀스 옵션 없이 설정
-- 1부터 증가하는 시퀀스, 기본 캐시 20개 
-- 기본 캐시 20개는 미리 20개의 시퀀스를 만들어 놓는다는 의미
-- 현재 시퀀스가 3인 상태에서 오라클 서버가 재실행되면 다음 시퀀스는 21

-- 10~20 까지 2씩 증가하는 시퀀스
CREATE SEQUENCE test_seq 
INCREMENT BY 2
START WITH 10
MINVALUE 10
MAXVALUE 20
CACHE 5;

시퀀스가 20이 넘으면 0RA-08004

👉 시퀀스 목록 확인

SELECT * FROM user_sequences;
SELECT * FROM seq;
SELECT object_name FROM user_objects
WHERE object_type = 'SEQUENCE';

👉 시퀀스 값 가져오기

시퀀스이름.NEXTVAL: 다음 시퀀스 값
시퀀스이름.CURRVAL: 현재 시퀀스 값

  • 동일한 INSERT, SELECT 에서 NEXTVAL을 여러번 해도 동일한 값 출력이 된다.
SELECT depts_seq.NEXTVAL FROM dual; -- 다음 시퀀스 

SELECT depts_seq.CURRVAL FROM dual; -- 현재 시퀀스

👉 시퀀스 수정

  • ALTER SEQUENCE 문장을 사용하여 수정가능
  • START WITH는 수정 불가
ALTER SEQUENCE 시퀀스명
[ INCREMENT BY 증가값 ]
[ MAXVALUE 최대값 | NOMAXVALUE ]
[ MINVALUE 최소값 | NOMINVALUE ]
[ CYCLE | NOCYCLE ]
[ CACHE 캐시값 | NOCACHE ];

ALTER SEQUENCE depts_seq MAXVALUE 99999;

👉 시퀀스 삭제

DROP SEQUENCE 시퀀스명;
DROP SEQUENCE depts_seq;

0개의 댓글