초보 프로그램 개발자

[ 7주차 ] Oracle 데이터베이스 (SEQUENCE) 본문

교육 일지/Database

[ 7주차 ] Oracle 데이터베이스 (SEQUENCE)

Ji_HG 2023. 6. 16. 18:10
SEQUENCE
  • SEQUENCE 는 일련번호 부여로 ROWNUM이랑 비슷하지만
  • 절대 중복되지 않는 고유번호를 가지고 있다.
CREATE SEQUENCE 시퀀스명
START WITH 1 -- 시작값
INCREMENT BY 1 -- 증가값
MAXVALUE 100 -- 최대증가값
NOCYCLE -- 최대값까지 사용했다면 1로 돌아가서 다시 사용 할껀가?
NOCACHE; -- 메모리상에 넣어두고 꺼내올껀가?

-----------------------------------------------------------------
CREATE SEQUENCE 시퀀스명
START WITH 1 -- 시작값
INCREMENT BY 1 -- 증가값
MAXVALUE 100 -- 최대증가값
CYCLE -- 최대값까지 사용했다면 1로 돌아가서 다시 사용
CACHE 10; -- 메모리상에 넣어두고 10씩 꺼내서 사용

위의 쿼리처럼 시퀀스를 만들어 주면 번호를 부여할 수 있게된다.

  • CURRVAL : 시퀀스 현재 번호를 표시 (SEQUENCE이름.CURRVAL)
  • NEXTVAL : 시퀀스 다음 번호를 표시 (SEQUENCE이름.NEXTVAL)
CREATE TABLE BBB
(ID NUMBER(3),
NAME CHAR(10));

CREATE TABLE CCC
(ID NUMBER(3),
NAME CHAR(10));

-- BBB 테이블
INSERT INTO BBB VALUES (DIV_DNO.NEXTVAL, 'AAA'); -- 1
INSERT INTO BBB VALUES (DIV_DNO.NEXTVAL, 'BBB'); -- 2
INSERT INTO BBB VALUES (DIV_DNO.NEXTVAL, 'CCC'); -- 3 부여

-- CCC 테이블
INSERT INTO CCC VALUES (DIV_DNO.NEXTVAL, 'AAA'); -- 4
INSERT INTO CCC VALUES (DIV_DNO.NEXTVAL, 'BBB'); -- 5
INSERT INTO CCC VALUES (DIV_DNO.NEXTVAL, 'CCC'); -- 6 부여

SEQUENCE는 BBB라는 테이블에 1,2,3을 부여했다고 해서 다른 테이블에서 1부터 시작하지 않는다.

이처럼 절대 중복되지 않는 고유번호를 가지게 된다.

 

-- 삭제
DROP SEQUENCE DIV_DNO;

-- 수정
ALTER SEQUENCE DIV_DNO
CYCLE
CACHE 10;

-- 시퀀스 보기
SELECT * FROM USER_SEQUENCES;