우선 내가 사용 하는 것을 적어 보도록 하자.
게시판에서 글이 등록되면 자동으로 그 글에 대한 번호를 1번 2번 식으로 순서가 매겨지면서 등록이 되도록
하게 할려고 확인하다가 오라클에서는 SEQUENCE를 사용하는 방법이 있다는것을 확인 할 수 있었다.
[예제]
1. 시퀀스 생성
create sequence sw_num
increment by 1 -- 1씩 증가하라는거고요
start with 1 -- 1부터 시작이고요 100 시작할려면 100 이라고 쓰시면 됩니다.
nomaxvalue -- 최대값 제한이 없다
nocycle
nocache;
2. 실지 활용 예제
Insert into SW_Board (number, username) values (sw_num.nextval, '박세우')
3. 좀더 상세한 정보 오라클클럽 출처 ^^/
시퀀스란?
◈ 유일(UNIQUE)한 값을 생성해주는 오라클 객체입니다.
◈ 시퀀스를 생성하면 기본키와 같이 순차적으로 증가하는 컬럼을 자동적으로 생성할수 있습니다.
◈ 보통 primary key 값을 생성하기 위해 사용합니다.
◈ 메모리에 Cache되었을 때 Sequence 값의 액세스 효율이 증가 합니다.
◈ Sequence는 테이블과는 독립적으로 저장되고 생성됩니다. 따라서 하나의 sequence를 여러 테이블에서 쓸 수 있습니다.
|
시퀀스 생성
![](http://www.oracleclub.com/imgs/oracle/sql/syntax03.gif)
![](http://www.oracleclub.com/imgs/oracle/sql/CreateSequence.jpg)
START WITH : 시퀀스의 시작 값을 지정합니다. n을 1로 지정하면 1부터 순차적으로 시퀀스번호가 증가 합니다.
INCREMENT BY : 시퀀스의 증가 값을 말합니다. n을 2로 하면 2씩 증가합니다. START WITH를 1로 하고 INCREMENT BY를 2으로 하면 1, 3, 5,7,.. 이렇게 시퀀스 번호가 증가하게 됩니다.
MAXVALUE n | NOMAXVALUE : MAXVALUE는 시퀀스가 증가할수 있는 최대값을 말합니다. NOMAXVALUE는 시퀀스의 값을 무한대로 지정합니다.
MINVALUE n | NOMINVALUE : MINVALUE는 시퀀스의 최소값을 지정 합니다. 기본값은 1이며, NOMINVALUE를 지정할 경우 최소값은 무한대가 됩니다
|
SQL>CREATE SEQUENCE emp_seq START WITH 1 INCREMENT BY 1 MAXVALUE 100000 ;
sequence created.
시작 값이 1일고 1씩 증가하고, 최대값이 100000만이 되는 시퀀스를 생성했습니다.
SQL>INSERT INTO emp(empno, ename, hiredate ) VALUES(emp_seq.NEXTVAL, ’julia’ , sysdate);
empno는 컬럼값을 입력할 때 일일이 다음 값을 기억하지 않아도 NEXTVAL을 사용하여 자동으로 입력할 수 있습니다.
현재 값을 반환 합니다. . NEXTVAL현재 시퀀스값의 다음 값을 반환 합니다.
SQL>SELECT emp_seq.CURRVAL FROM DUAL ;
CURRVAL --------- 1
SQL>SELECT emp_seq.NEXTVAL FROM DUAL ;
NEXTVAL --------- 2 : CURRVAL :
|
사용규칙
◈ NEXTVAL, CURRVAL을 사용할 수 있는 경우 - subquery가 아닌 select문 - insert문의 select절 - insert문의 value절 - update문의 set절
◈ NEXTVAL, CURRVAL을 사용할 수 없는 경우 - view의 select절 - distinct 키워드가 있는 select문 - group by, having, order by절이 있는 select문 - select, delete, update의 subquery - create table, alter table 명령의 default값
시퀀스의 수정 및 삭제
![](http://www.oracleclub.com/imgs/oracle/sql/syntax04.gif)
![](http://www.oracleclub.com/imgs/oracle/sql/DropSequence.jpg)
START WITH는 수정할수 없습니다. START WITH 절이 없다는 점을 빼고는 CREATE SEQUENCE와 같습니다.
|
SQL>ALTER SEQUENCE emp_seq INCREMENT BY 2 CYCLE;
sequence altered.
2씩 증가하고, 최대값을 넘으면 다시 처음부터 순환하도록 수정하였습니다.
DROP 문을로 필요하지 않은 시퀀스는 삭제 할수 있습니다.
SQL>DROP SEQUENCE PRD_SEQ; sequence dropped.
| |