[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 |