뇨내

[Oracle-SQL Developer] Sequence 시퀀스 본문

Oracle/Casting + Sequence + Constraint

[Oracle-SQL Developer] Sequence 시퀀스

삐옥 2021. 11. 21. 15:15

 

 

 

 

 

 

 

 

 


 

 

 

SEQUENCE 시퀀스

 

- 시퀀스 객체 생성하기

CREATE SEQUENCE 시퀀스명;

 

CREATE SEQUENCE 시퀀스명 
    INCREMENT BY N 
    START WITH N  

    MAXVALUE N 
    MIN VALUE N 

    CYCLE 
    CACHE N;

 

- 시퀀스 객체 삭제하기

DROP SEQUENCE 시퀀스명;

 

- 시퀀스 객체 사용하기

시퀀스명.nextVal

시퀀스명.currVAl 

- 데이터베이스 객체 중 하나
- 식별자를 만드는데 주로 사용한다. > PK컬럼에 값을 넣을 때 잘 사용한다.
- 일련 번호를 생성하는 객체

 


 

1
2
3
4
5
6
7
8
9
10
11
12
create sequence seqNum;
 
select seqNum.nextVal from dual; -- 1,2,3,4,5,... 호출할때마다 증가된 숫자를 반환
 
select 'A' || seqNum.nextVal from dual; --A15, A16,...
 
select 'A' || trim(to_char(seqNum.nextVal, '000')) from dual;-- A001, A002
 
create sequence seqNum2;
 
select 'A' || trim(to_char(seqNum.nextVal, '000')) || 'B' || trim(to_char(seqNum2.nextVal, '000')) from dual;
 
cs

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
-- 메모 테이블
drop table tblMemo;
 
create table tblMemo 
(
    seq number(3primary key,
    name varchar2(30),                     
    memo varchar2(1000),
    regdate date
);
 
select * from tblMemo;
 
drop sequence seqMemo;
create sequence seqMemo -- 마지막 번호를 확인 후 고쳐놓아야함 그냥 만들면 안됨
    start with 13;      -- 이런식으로!
 
insert into tblMemo(seq, name, memo, regdate) values (seqMemo.nextVal, '아무개''테스트~.', sysdate);
 
 
 
 
-- 현재 사용중인 시퀀스 객체(seqMemo)의 마지막 번호??
-- 1. currVal : 가장 마지막에 생성한 숫자를 반환(like 자바 큐, 스택 peek()) 
--> 현재 계정으로 로그인 후 최소1번은 nextVal을 호출해야 그 다음부터 currVal를 호출할 수 있다.
select seqMemo.currVal from dual;
 
 
-- 2. nextVal
--> 문제 : 번호하나를 소비해버림 > 구멍이 발생
select seqMemo.nextVal from dual; -- 12 > 13 > 21(비정상적 종료일때 생기는 현상) : 큰일아님 = 문제X ==> 번호튀어도 무시해도 괜찮음
 
 
 
-- 3. max() 함수 사용
-- 그렇다면 이 방법 추천!
-- 번호 소비X
select max(seq) from tblMemo;
 
cs

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
drop sequence seqTest;
 
create sequence seqTest
    increment by 1--증감치 지정(양수,음수)
    start with 1--시작값(seed)
    maxvalue 30 --최댓값 : 오버플로우되면 에러남, chache보다 커야함
    --minvalue -5 --최솟값 : 오버플로우되면 에러남
    cycle -- 무한반복시켜줌 : 30 > 1 > ... > 30 > 1 >...
    cache 20 --HDD의 기록 단위, 보통 20으로 한다(기본값)
    ;
    
            
create sequence seqTest 
        increment by 1
        start with 1;
 
    
    
select seqTest.nextVAl from dual; -- 1 > 6 > 11 > 16 > 21...
                                  -- -1 > -2 > -3 > -4 > -5 등등
cs

 

 

 

 

 

 


 

Comments