Sequence
생성
CREATE SEQUENCE owner_name.seq_name;
옵션 기본 값 및 설명
| Name | Value | Description |
|---|---|---|
| MIN_VALUE | 1 | 최소 값 |
| MAX_VALUE | 9999999999999999999999999999 | 최대 값 |
| INCREMENT_BY | 1 | 증가하는 숫자 |
| CYCLE_FLAG | N | 순환 여부 |
| ORDER_FLAG | N | 순서대로 생성 여부 Y : 시퀀스 값을 건너뛸 수 없음 (RAC 구성) N : 시퀀스 값을 건너뛸 수 있음 |
| CACHE_SIZE | 20 | 메모리에 할당해 놓을 양 |
| LAST_NUMBER | 1 | 현재 값 |
| SCALE_FLAG | N | 확장 가능 여부 Y : 6자리 숫자가 앞에 추가 ( [(instance id % 100) + 100] ¦¦ [session id % 1000]) |
| EXTEND_FLAG | N | 확장 접두사 추가에 따른 변수와 테이블 열의 크기 조정 여부 |
| SHARDED_FLAG | N | |
| SESSION_FLAG | N | 세션 시퀀스 여부 (세션이 사라지면 액세스한 세션 시퀀스의 상태도 없어지는 특징을 가짐) |
| KEEP_VALUE | N | 애플리케이션 연속성 (Application Continuity) 에 대해 원래 값 유지 여부 (사용자가 해당 Owner일 경우에만 발생) |
| DUPLICATED | N | |
| SHARDED | N |
수정
ALTER SEQUENCE owner_name.seq_name option_name value;
--INCREMENT BY
ALTER SEQUENCE owner_name.seq_name INCREMENT BY 1000;
--MAXVALUE
ALTER SEQUENCE owner_name.seq_name MAXVALUE 9999999;
--CACHE
ALTER SEQUENCE owner_name.seq_name CACHE 1000;
ALTER SEQUENCE owner_name.seq_name NOCACHE;
--CYCLE
ALTER SEQUENCE owner_name.seq_name CYCLE;
ALTER SEQUENCE owner_name.seq_name NOCYCLE;
시퀀스 현재 값 확인
--User
SELECT LAST_NUMBER FROM USER_SEQUENCES WHERE SEQUENCE_NAME = 'seq_name';
--DBA
SELECT LAST_NUMBER FROM DBA_SEQUENCES WHERE SEQUENCE_NAME = 'seq_name';
삭제
DROP SEQUENCE owner_name.seq_name;
MySQL의 AUTO_INCREMENT처럼 사용
CREATE TABLE owner_name.table_name (
seq NUMBER(22) DEFAULT owner_name.sequence_name.nextval,
column_name1 VARCHAR2(100),
column_name2 VARCHAR2(100),
...
column_name8 VARCHAR2(100),
column_name9 VARCHAR2(100),
CONSTRAINT "pk_name" PRIMARY KEY (seq)
) TABLESPACE tablespace_name;
--MySQL의 AUTO_INCREMENT처럼 시퀀스 증가 컬럼을 제외한 나머지 컬럼에 데이터를 넣으면 됨
INSERT INTO owner_name.table_name (column_name1, column_name2, ... column_name8, column_name9) VALUES (value1, value2, ... value8, value9);
12c부터 가능, 비슷한 기능인 IDENTITY도 있음