본문 바로가기

오라클

시퀀스(Sequence)

시퀀스, Sequence

- 시퀀스 객체

- DB Object 중 하나

- DB 개발자에게 식별자들을 관리하기 편하도록 기능 제공

- 시퀀스의 역할은 중복되지 않은 유일한 숫자를 반환하는데 있다. 중간에 건너뛰는 숫자에 연연해 하지 말것(*****).

- 절대로 중간에 비어있는 숫자가 존재 않아야 한다면 시퀀스 객체를 사용하지 말것 -> 직접 개발자가 관리할 것


시퀀스 객체 사용하기

1. create : 생성

2. alter : 수정

3. drop : 삭제


시퀀스 객체 생성하기

- create sequence 시퀀스명;

- create sequence 테이블명;


시퀀스 객체 사용하기

1. testSeq.nextval : 1 증가된 다음 일련번호 반환(Queue.poll())

2. testSeq.currval : 증가 시키지 않은 현재 일련 번호 반환(Queue.peek())



create sequence testSeq; 

--시퀀스 객체는 특정 테이블에 종속적이지 않다.(주로 테이블과 연관지어 사용은 한다.)


select testSeq.nextval from dual; +1씩 증가

select testSeq.currval from dual;   현재 숫자 출력


ex)메모장


create table memo

(

seq number primary key,

name varchar2(20) not null,

memo varchar2(1000) not null

);


insert into memo(seq,name,memo) values(1,'홍길동','메모입니다.');

insert into memo(seq,name,memo) values(testSeq.nextval,'홍길동','메모입니다.');


-------------------------------------------------------------------------------------------

ex)테이블의 식별자

1. 숫자

2. 문자열


상품테이블

- 상품코드,상품명,가격,수량

- 상품코드(PK) -> '1','2','3','4'


create table tblProduct

(

    code varchar2(5) primary key, --상품코드

    name varchar2(100) not null, -- 상품명

    price number not null, -- 가격

    qty number not null --수량

);


create sequence productSeq; --시퀀스 객체 생성


--시퀀스 객체는 일련번호를 초기화할 수 있는 도구가 없음.

---> 대신 시퀀스 객체를 새로 생성할 떄 여러가지 초기값들을 대입


--원하는 방식의 시퀀스를 만드는 방법

create sequence productSeq; --기본형(가장 많이 사용)

create sequence productSeq 옵션 옵션 옵션 옵션 옵션; --사용자 정의형


drop sequence productSeq;

create sequence productSeq

  --increment by 1 -- 증가치(양수/음수 모두 사용 가능) ****

  --start with 10    -- 시작값(seed) ****

  --maxvalue 20    -- 최대값(넘으면 에러 발생) <ORA-08004: sequence PRODUCTSEQ.NEXTVAL exceeds MAXVALUE and cannot be instantiated> 

  --minvalue 10

  --cycle              --반복

  cache 20           --눈에 보이는 제어(X)

 ;


--ORA-08002: sequence PRODUCTSEQ.CURRVAL is not yet defined in this session

select productSeq.nextval from dual;

select productSeq.currval from dual;

'오라클' 카테고리의 다른 글

INSERT문/UPDATE문/DELETE문 (DML)  (0) 2018.08.29
서브쿼리(SubQuery)  (0) 2018.08.28
where절(SQL)  (0) 2018.08.23
Select문(DML)  (0) 2018.08.23
SQL 자료형  (0) 2018.08.23