시퀀스 (SEQUENCE) 란?
오라클의 시퀀스는 규칙에 따라 순번을 생성하는 객체입니다. 시퀀스는 데이터베이스 테이블에 행을 삽입할 때 행 번호를 생성하는 데 사용됩니다. 시퀀스는 또한 보고서를 생성하거나 데이터를 정렬하는 데 사용될 수 있습니다.
시퀀스 생성
CREATE SEQUENCE [시퀀스 이름]
[START WITH 시작번호]
[INCREMENT BY 증가단위]
[MAXVALUE 최대값]
[MINVALUE 최소값]
[CYCLE | NOCYCLE]
[CACHE | NOCACHE]
* 시퀀스 이름 제외하고 나머지 전부 생략 가능
START WITH : 시퀀스 시작 숫자 (DEFAULT : 1)
INCREMENT BY : 증가 단위이다. 지정한 값 만큼 시퀀스 증가 (DEFAULT : 1)
MAXVALUE : 시퀀스의 최대값을 의미 (생략 시 해당 오라클 버전에서의 시퀀스 최대값)
MINVALUE : MAXVALUE의 반대로 시퀀스의 최소값을 의미한다. (DEFAULT : 1)
CYCLE | NOCYCLE : MAXVALUE에 도달하면 다시 START WITH 값에서부터 값을 생성하도록 설정하는 옵션입니다.
CYCLE 옵션을 사용하지 않으면 시퀀스가 MAXVALUE에 도달하면 시퀀스는 더 이상 값을 생성하지 않습니다.
(DEFAULT : NOCYCLE)
CACHE | NOCACHE : 시퀀스가 생성한 값을 메모리에 저장하는 기능입니다. 시퀀스 캐시를 사용하면 시퀀스가 값을 생성할 때마다 데이터베이스에서 값을 조회하는 대신 메모리에서 값을 가져와 성능을 향상시킬 수 있습니다.
(DEFAULT : CACHE 20)
시퀀스 수정
ALTER SEQUENCE [시퀀스 이름]
[INCREMENT BY 증가단위]
[MAXVALUE 최대값]
[MINVALUE 최소값]
[CYCLE | NOCYCLE]
[CACHE | NOCACHE]
* CREATE 구문과 다르게 ALTER 구문에서는 START WITH 옵션 값은 수정이 불가능하다.
* 현재 들어있는 값보다 높은 최솟값(감소 시퀀스일 경우 그 반대)로도 설정할 수 없습니다.
시퀀스 삭제
DROP SEQUENCE [시퀀스 이름];
시퀀스 조회
SELECT 시퀀스이름.CURRVAL FROM DUAL #해당 시퀀스 조회
SELECT * FROM USER_SEQUENCES #전체 시퀀스 조회
NEXTVAL | CURRVAL
NEXTVAL : 시퀀스에서 다음 숫자를 반환하는 함수
CURRVAL : 현재 시퀀스의 값을 반환하는 함수
예를 들어, 다음과 같이 시퀀스를 생성할 수 있습니다.
create sequence my_sequence;
시퀀스를 생성한 후에는 NEXTVAL 함수를 사용하여 다음 숫자를 반환할 수 있습니다.
select my_sequence.nextval from dual;
CURRVAL 함수를 사용하여 현재 시퀀스의 값을 반환할 수도 있습니다.
select my_sequence.currval from dual;
CURRVAL 사용 시 아래와 같은 에러 발생시 해결방법
ORA-08002 : '시퀀스이름.CURRVAL' 이 세션에서는 정의 되어 있지 않습니다
에러의 원인은 시퀀스이름.CURRVAL'이 해당 세션(일종의 기록)에 남아있지 않아서이다.
'시퀀스이름.NEXTVAL' 을 사용하여 세션을 생성해주어야 사용 가능하다.
현재 시퀀스의 값 확인하는 다른방법
SELECT LAST_NUMBER
FROM USER_SEQUENCES
WHERE SEQUENCE_NAME = '시퀀스네임';
DUAL
오라클에서 dual은 하나의 행과 하나의 열로 구성된 가상 테이블입니다.
dual은 테이블과 함수를 조인하거나, 데이터를 확인하거나, 함수를 테스트하는 데 사용할 수 있습니다.
예를 들어, 다음과 같이 dual을 사용하여 현재 날짜와 시간을 확인할 수 있습니다.
select sysdate from dual;
dual은 다음과 같이 함수를 테스트하는 데에도 사용할 수 있습니다.
select to_char(sysdate, 'yyyy-mm-dd') from dual;
'STUDY > DB SQL' 카테고리의 다른 글
[SQL] 오라클 TRIM함수 (0) | 2023.06.26 |
---|---|
[SQL] 오라클 LISTAGG함수 (0) | 2023.06.26 |
[DB] Master & Slave 개념 이해 (0) | 2023.06.22 |
[DB] DBMS별 Schema(스키마), Database 개념 차이점 (0) | 2023.06.09 |
[Oracle] SQL Developer 단축키 (0) | 2023.06.08 |