2020041308 / 시퀀스(Sequence)

-- 시퀀스(Sequence) 


-- 오라클에서는 행(레코드)을 구분하기 위해서 기본 키(프라이머리 키)를 두고 있는데 기본 키는 중복된 값을 가질 수 있으므로 항상 고유한 값을 가져야 한다

-- 기본 키가 고유한 값을 갖도록 사용자가 직접 값을 생성해 내려면 부담이 크다

-- 테이블 내의 고유한 숫자를 자동으로 생성하는 자동 번호 생성해 주는 기능이 시퀀스이다

-- 시퀀스를 기본 키로 사용하게 되면 사용자의 부담을 줄일 수 있다

-- 테이블 생성 후 시퀀스(일련번호)를 따로 만들어야 한다 




[1] 샘플 테이블 생성

create table memos(

      num          number(4)                 constraint memos_num_pk   primary key,

      name         varchar2(20)              constraint memos_name_nn  not null,

      postDate    Date default(sysdate)

);




[2] 해당 테이블의 시퀀스 생성

create sequence memos_seq

start with 1 increment by 1;




[3] 데이터 입력 : 일련번호 포함

insert into memos(num, name) values(memos_seq.nextVal, '홍길동');


insert into memos(num, name) values(memos_seq.nextVal, '이순신');


select * from memos;


insert into memos(num, name) values(memos_seq.nextVal, '강감찬');


컴퓨터를 종료 후 재실행 시에도 기존 데이터를 보관하고 있다

20/04/14 로 오늘 날짜로 입력되는 것을 확인 할 수 있다

select * from memos;




[4] 현재 스퀀스가 어디까지 증가되어져 있는지 확인

select memos_seq.currVal from dual;




[5] 시퀀스 수정 : 최대 증가값을 4까지 증가하고 더 이상 삽입을 제한

alter sequence memos_seq maxValue 4;


insert into memos(num, name) values(memos_seq.nextVal, '안중근');


insert into memos(num, name) values(memos_seq.nextVal, '안창호'); -- error

최대 증가값 초과 에러


alter sequence memos_seq maxValue 100; --4에서 100으로 변경


insert into memos(num, name) values(memos_seq.nextVal, '안창호'); -- 재실행


select * from memos;




[6] 시퀀스 삭제

drop sequence memos_seq;




[7] 시퀀스 없는 상태에서 자동 증가값 구현

select max(num) from memos;


insert into memos(num,name)

values((select max(num)+1 from memos), '세종대왕');


select * from memos;

댓글

Designed by JB FACTORY