시퀀스?
유일한(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(7) PRIMARY KEY, CONTENT_DATE Date DEFAULT SYSDATE, CONTENT_TITLE varchar2(100), CONTENT_WRITER varchar2(100), CONTENT_DETAIL varchar2(300), CONTENT_HIT NUMBER(4) DEFAULT 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 |
'데이터베이스 > 데이터베이스 명령어' 카테고리의 다른 글
20180220 [ORACLE] 사용자 권한 (0) | 2018.02.20 |
---|---|
20180220 [ORACLE] TABLESPACE 관련 명령어 (0) | 2018.02.20 |
20180219 [ORACLE] AutoTrace (0) | 2018.02.19 |