반응형
이번 포스팅에서는 Oracle의 Seq 사용 방법에 대해 알아보겠습니다.
1. Sequence 생성
CREATE SEQUENCE 시퀀스명
INCREMENT BY 숫자 -- 숫자만큼 증가(음수일 경우 그 숫자만큼 감소)
START WITH 숫자 -- 시작 숫자 설정
MINVALUE 숫자 -- 최소값 설정
MAXVALUE 숫자 -- 최대값 설정
CYCLE/NOCYCLE -- CYCLE : 시퀀스가 최대값에 도달하면 최소값부터 다시 시작, NOCYCLE : 최대값 생성 시 시퀀스 생성 중지
CACHE/NOCACHE -- CACHE : 메모리에 시퀀스 값을 미리 할당, NOCACHE : 시퀀스값을 메모리에 할당X
예시
CREATE SEQUENCE USER_SEQ -- USER_SEQ라는 이름으로 생성
MINVALUE 1 -- 최소 값 (1)
MAXVALUE 9999 -- 최대 값 (9999)
INCREMENT BY 1 -- 증가값 (1)
START WITH 1 -- 시작숫자 (1)
NOCACHE -- CACHE 담기 X
CYCLE; -- 최대값 도달 시, 1(시작숫자)부터 시작
2. Sequence 수정
CREATE에서 ALTER로 명령어를 바꾼것과 같다.
단, START WITH은 수정이 불가능하다.
ALTER SEQUENCE 시퀀스명
INCREMENT BY 숫자 -- 숫자만큼 증가(음수일 경우 그 숫자만큼 감소)
MINVALUE 숫자 -- 최소값 설정
MAXVALUE 숫자 -- 최대값 설정
CYCLE/NOCYCLE -- CYCLE : 시퀀스가 최대값에 도달하면 최소값부터 다시 시작, NOCYCLE : 최대값 생성 시 시퀀스 생성 중지
CACHE/NOCACHE -- CACHE : 메모리에 시퀀스 값을 미리 할당, NOCACHE : 시퀀스값을 메모리에 할당X
예시
ALTER SEQUENCE USER_SEQ -- USER_SEQ 수정
MINVALUE 10 -- 최소 값 (1)
MAXVALUE 99990 -- 최대 값 (99990)
INCREMENT BY 1 -- 증가값 (10)
NOCACHE -- CACHE 담기 X
CYCLE; -- 최대값 도달 시, 1(시작숫자)부터 시작
3. Sequence 삭제
DROP SEQUENCE 시퀀스명;
예시
DROP SEQUENCE USER_SEQ;
4. Sequence 조회
SELECT 시퀀스명.CURRVAL FROM DUAL; --해당 시퀀스의 현재 값 확인
SELECT * FROM USER_SEQUENCES; --전체 시퀀스 조회
예시
SELECT USER_SEQ.CURRVAL FROM DUAL;
5. Sequence 사용
아래처럼 입력시, SEQ가 자동으로 생성됩니다.
시퀀스명.NEXTVAL
예시
INSERT INTO USERS
(
USER_SEQ
)
VALUES
(
LPAD(USER_SEQ.NEXTVAL, 4, '0')
)
위의 예시에서 PK로 쓰기 위해서 날짜와 데이터를 의미하는 단어를 이용하여 응용한 쿼리는 아래와 같다.
INSERT INTO USERS
(
USER_SEQ
)
VALUES
(
'USER'||TO_CHAR(sysdate,'YYYYMMDD')||LPAD(USER_SEQ.NEXTVAL, 4, '0')
)
- LPAD : 1을 0001로 출력( 숫자를 4자리로 출력하게함. )
- TO_CHAR(sysdate, 'YYYYMMDD') : 현재 날짜를 YYYYMMDD형식으로 문자열 추출
- || : 앞 뒤의 문자열을 합침
반응형
'DB > Oracle' 카테고리의 다른 글
[iBatis] 쿼리문 재사용 sql과 include (0) | 2022.10.31 |
---|---|
[Oracle] ASM 간단 정리 (0) | 2022.03.25 |
[Oracle] ORA-01476 제수가 0 입니다 - 조치 방법 (0) | 2021.12.30 |
[Oracle] 제약조건 및 인덱스 조회 방법 (0) | 2021.11.25 |
[Oracle] AutoCommit 확인 방법 (0) | 2021.11.17 |