Database/SQL

[SQL] 시퀀스 (Sequence)

gangintheremark 2023. 8. 1. 13:41
728x90

시퀀스(SEQUENCE)

시퀀스호출될 때마다 자동으로 숫자를 생성하는 Oracle 객체로서 테이블의 특정 컬럼값을 넘버링하기 위해 사용된다. 주로 게시판의 글 번호에 순차적인 넘버링을 적용하는 경우에 사용된다.

CREATE SEQUENCE 시퀀스명
[ START WITH n]
[ INCREMENT BY n]
[ MAXVALUE n | NOMAXVALUE ]
[ MINVALUE n | NOMINVALUE ] 
[ CYCLE | NOCYCLE ]
[ CACHE n | NOCACHE ]
  • START WITH n : 시퀀스 번호의 시작값 (생략시 1부터 시작)
  • INCREMENT BY n : 시퀀스 번호의 증가치 (생략시 1씩 증가)
  • MAXVALUE n : 시퀀스가 가질 수 있는 최대값
  • MINVALUE n : 시퀀스가 가질 수 있는 최소값
  • CYCLE : 시퀀스 값이 최대값까지 증가가 완료되면 MINVALUE 값부터 다시 시작
  • NOCYCLE : 시퀀스 값이 최대값까지 증가가 완료되면 에러 발생
  • CACHE : 성능향상을 위해 메모리상의 시퀀스 값을 미리 만들어서 필요시 바로 제공
  • NOCACHE : 필요할 때마다 매번 시퀀스 값을 계산해서 반환

💡 시퀀스(sequence) 정보 출력

SELECT * FROM user_sequences;

💡 테이블에 시퀀스값 저장

-- 부서 번호를 자동생성한느 시퀀스 생성
CREATE SEQUENCE dept_deptno_seq
 START WITH 10
 INCREMENT BY 10
 NOCYCLE;

-- deptno 컬럼값으로 시퀀스명.NEXTVAL 지정하여 자동 생성된 값 저장
INSERT INTO dept (deptno,dname,loc)
VALUES ( dept_deptno_seq.NEXTVAL, '개발','서울');
INSERT INTO dept (deptno,dname,loc)
VALUES ( dept_deptno_seq.NEXTVAL, '인사','경기');
INSERT INTO dept0(deptno,dname,loc)
VALUES ( dept_deptno_seq.NEXTVAL, '관리','부산');
COMMIT;

NEXTVAL과 CURRVAL

  • 지정된 시퀀스의 값을 증가시키고 싶다면 시퀀스명.NEXTVAL
  • 현재 시퀀스를 알고싶다면 시퀀스명.CURRVAL

시퀀스 수정

ALTER SEQUENCE 시퀀스명
[ INCREMENT BY n]
[ MAXVALUE n | NOMAXVALUE ]
[ MINVALUE n | NOMINVALUE ] 
[ CYCLE | NOCYCLE ]
[ CACHE n | NOCACHE ]
  • START WITH n 옵션은 변경 불가능

시퀀스 삭제

 DROP SEQUENCE 시퀀스명;
728x90