• 시퀀스?

    • 유일한(Unique)한 키 값을 생성해주는 오라클 객체

    • 시퀀스를 생성하면 기본키와 같이 순차적으로 증가하는 컬럼을 자동적으로 생성 가능하다.

    • 보통 PK 값을 생성하기 위해서 사용한다.

    • 메모리에 cache 되었을 때 시퀀스 값의 액세스 효율이 증가한다.

    • 시퀀스는 테이블과는 독립적으로 저장되고 사용된다.

시퀀스의 생성 및 삭제
1
2
3
4
5
6
7
8
9
10
11
12
13
SQL> CREATE SEQUENCE sequence_name
  2    START WITH 1
  3    INCREMENT BY 1
  4    MAXVALUE 100
  5  ;
 
Sequence created.
 
--------------------------------------
 
SQL> DROP SEQUENCE sequence_name;
 
Sequence dropped.
cs
  • START WITN (n) 
    • n 을 초기화 값으로 시작
  • INCREMENT BY (n)
    • n 을 증가하는 값으로 시작
  • MAXVALUE (n)
    • n 을 시퀀스가 갈 수 있는 최대 값으로 설정
그 밖에 자세한 내용은 여기에서 확인


시퀀스 사용 예

(1) 1부터 시작해서 1씩 증가해 최대 100까지 증가하는 시퀀스를 생성 (위의 내용)

(2) 이후 시퀀스가 정상적으로 생성되고 있는지 조회

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
SQL> SELECT sequence_name.NEXTVAL FROM DUAL;
 
   NEXTVAL
----------
         1
 
SQL> SELECT sequence_name.NEXTVAL FROM DUAL;
 
   NEXTVAL
----------
         2
 
SQL> SELECT sequence_name.NEXTVAL FROM DUAL;
 
   NEXTVAL
----------
         3
 
SQL> SELECT sequence_name.NEXTVAL FROM DUAL;
 
   NEXTVAL
----------
         4
cs


위의 내용을 보면 조회는 올바르게 되고 있는 것을 확인 가능하다. 


시퀀스를 이용하여 데이터를 등록하기

(1) 게시판 테이블 생성

1
2
3
4
5
6
7
8
CREATE TABLE WEB_BOARD_TB(
  CONTENT_NUM NUMBER(7PRIMARY KEY,
  CONTENT_DATE Date DEFAULT SYSDATE,
  CONTENT_TITLE varchar2(100),
  CONTENT_WRITER varchar2(100),
  CONTENT_DETAIL varchar2(300),
  CONTENT_HIT NUMBER(4DEFAULT 0
);
cs


(2) 시퀀스 이용 데이터 삽입

1
2
3
4
INSERT INTO WEB_BOARD_TB 
  (CONTENT_NUM, CONTENT_TITLE, CONTENT_WRITER, CONTENT_DETAIL)
VALUES 
  (CONTENT_SEQ.NEXTVAL, '게시글 제목''게시글 작성자''게시글 내용');
cs


(3) (2)의 데이터를 여러개 삽입 후 조회

굳이 따로 보여주지 않더라도 되어있는걸 확인 가능하다.


현재 생성된 모든 시퀀스 확인

1
2
3
4
5
SQL> SELECT * FROM user_sequences;
 
SEQUENCE_NAME    MIN_VALUE  MAX_VALUE INCREMENT_BY CY OR CACHE_SIZE LAST_NUMBER
--------------- ---------- ---------- ------------ -- -- ---------- -----------
CONTENT_SEQ              1     100000            1 N  N          20          41
cs


.NEXTVAL & .CURRVAL 

그 다음 시퀀스를 출력, 현재 세션이 가지고있는 최종 시퀀스 출력한다. 만약 한번도 NEXTVAL 을 요구한 적 없다면 에러가 나타나며 현재 세션이 보유하고 있는 CURRVAL 이 없기 때문이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
SQL> SELECT CONTENT_SEQ.NEXTVAL FROM dual;
 
   NEXTVAL
----------
        26
 
SQL> SELECT CONTENT_SEQ.NEXTVAL FROM dual;
 
   NEXTVAL
----------
        27
 
SQL> SELECT CONTENT_SEQ.CURRVAL FROM dual;
 
   CURRVAL
----------
        27
cs


Posted by doubler
,