2020041308 / 시퀀스(Sequence)
- ORACLE
- 2020. 4. 30.
-- 시퀀스(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;
'ORACLE' 카테고리의 다른 글
2020040908 / cascade 옵션 (0) | 2020.04.30 |
---|---|
다중 행(Multiple Row Operator) 서브 쿼리문 (0) | 2020.04.30 |
2020040908 / [13] 제약 조건(외래키) 컬럼 삭제 (0) | 2020.04.30 |
2020040907 / [12] 제약 조건 제거하기, [13] 제약 조건(외래키) 컬럼 삭제 (0) | 2020.04.30 |
2020040907 / [11] not null 제약 조건 추가하기 (0) | 2020.04.30 |