[Oracle] Sequence

2023. 3. 13. 16:33

Sequence ?

자동으로 순차적으로 증가하는 순번을 반환하는 데이터베이스 객체

아래와 같은 방법으로 컬럼의 값을 증가 할 수 있음

1. MAX(컬럼) + 1

2. 시퀀스 =  DB에 ROW가 추가 될 때마다 자동으로 +1

 

1. Sequence 생성

CREAT SEQUENCE [스키마명].[시퀀스명]
INCREMENT BY [증감숫자] -- 양수 = 증가 / 음수 = 감소 / default 1
START WITH [시작번호] -- defalut 값은 증가일 때 Minvalue / 감소일 때 Maxvalue
[NOMINVALUE or MINVALUE] [최솟값] 
[NOMAXVALUE or MAXVALUE] [최대값]
-- NOMINVALUE : 디폴트값 설정, 증가일때 1, 감소일때 -1028 
-- MINVALUE : 최소값 설정, 시작숫자와 작거나 같아야하고 MAXVALUE보다 작아야함
-- NOMAXVALUE : 디폴트값 설정, 증가일때 1027, 감소일때 -1
-- MAXVALUE : 최대값 설정, 시작숫자와 같거나 커야하고 MINVALUE보다 커야함
[CYCLE or NOCYCLE] -- 최대값 도달 시 최솟값부터 시작 or not
[CACHE or NOCACHE] -- 메모리에 시퀀스 값을 미리 할당 or not
[ORDER or NOORDER] -- 요청 순으로 값 생성 or not

+ CACHE 설정 시 속도 빠름 / 동시 사용자가 많을 경우 유리

+ ORDER 설정 시 시스템 부하 있을 수 있음

 

--예) 1부터 1씩 증가하여 9999까지 부여
CREATE SEQUENCE TEST_SEQ --시퀀스이름 TEST_SEQ
INCREMENT BY 1 --증가 값 1
START WITH 1 --시작 1
MINVALUE 1 --최소값 1
MAXVALUE 9999 --최대값 9999
NOCYCLE --순환X
CACHE; --메모리에 시퀀스값 미리할당

--예) 1000부터 1씩 감소하여 1까지 부여
CREATE SEQUENCE TEST_SEQ
INCREMENT BY -1
START WITH 1000
MINVALUE 1
MAXVALUE 1000
NOCYCLE
NOCACHE;

 

 

2. Sequence 조회

--전체 sequence 조회
SELECT * FROM SEQ;
SELECT * FROM USER_SEQUENCES;

--현재 sequence 조회
SELECT TEST_SEQ.CURRVAL
  FROM dual;
  
--현재 sequence의 다음 값
--이때, 현 SELECT문으로 시퀀스 값 추가 증가 됨
SELECT TEST_SEQ.NEXTVAL
  FROM dual;
+ CURRVAL은 여러번 실행해도 순번은 증가 X
+ NEXTVAL을 한번 실행한 세션에서만 사용 가능하다. 위의 쿼리만 사용 시 아래 에러 발생
ORA-08002 : emp_seq.CURRVAL은 이 세션에서는 정의 되어있지않습니다

 

* NEXTVAL 및 CURRVAL을 사용할 수 있는 경우
 - 서브쿼리가 아닌 SELECT문
 - INSERT문의 SELECT절
 - INSERT문의 VALUE절
 - UPDATE문의 SET절


* NEXTVAL 및 CURRVAL을 사용할 수 없는 경우
 - VIEW의 SELECT절
 - DISTINCT 키워드가 있는 SELECT문
 - GROUP BY, HAVING, ORDER BY절이 있는 SELECT문
 - SELECT, DELETE, UPDATE의 서브쿼리
 - CREATE TABLE, ALTER TABLE 명령의 DEFAULT값

 

 

3. Sequence 수정

시퀀스는 DDL문으로, ALTER문으로 수정

ALTER SEQUENCE TEST_SEQ INCREMENT BY 2 --증가값을 2로 변경
ALTER SEQUENCE TEST_SEQ MAXVALUE 99999 --최대값을 9999에서 999로 변경

※ STARTWITH (시작값) 변경 불가

 

 

4. Sequence 삭제

DROP SEQUENCE TEST_SEQ

 

 

 

 

 

참고 https://mine-it-record.tistory.com/62 https://coding-factory.tistory.com/420 https://gent.tistory.com/393

'Database > Oracle' 카테고리의 다른 글

[Oracle] 관리자 계정(system, sys) 비밀번호 변경  (0) 2023.03.16
[Oracle] 이전 명령어 방향키로 출력  (0) 2023.03.15
[Oracle] Listener & Oracel DB  (0) 2023.03.12
[Oracle] SCN, Checkpoint  (0) 2023.03.12
[Oracle] 구조  (0) 2023.03.09

+ Recent posts