DBMS/Oracle
                Oracle auto-increment
               
              
                Ishaya seon
                 2009. 7. 30. 19:36
              
              
                    
        
        
            Oracle 에서 테이블의 컬룸의 값들이 자동으로 증가하도록 테이블을 구성하는 방법 
우선 원하는 테이블을 생성한다 
CREATE TABLE ajaxchat (
  id int NOT NULL ,
  user varchar(255) NOT NULL,
  msg varchar(255) NOT NULL,
  time int NOT NULL,
  PRIMARY KEY  (id)
);
그후 Sequence 테이블을 작성 한다 .
SQL>CREATE SEQUENCE id 
        START WITH 1 
        INCREMENT BY 1 
        MAXVALUE 100000 ; 
 
 시작 값이 1일고 1씩 증가하고, 최대값이 100000만이 되는 시퀀스를 생성했습니다. 
그리고 값을 저장 할 때 이런식으로 insert 시킨다 
 SQL>INSERT INTO ajaxchat(id, user, msg,time ) VALUES(id.NEXTVAL, ’julia’ , sysdate,1); 
    empno는 컬럼값을 입력할 때 일일이 다음 값을 기억하지 않아도 NEXTVAL을 사용하여 
    자동으로 입력할 수 있습니다. 
|  | 
| 
| 시퀀스란?
 
 ◈ 유일(UNIQUE)한 값을 생성해주는 오라클 객체입니다.
 
 ◈ 시퀀스를 생성하면 기본키와 같이 순차적으로 증가하는 컬럼을 자동적으로 생성할수 있습니다.
 
 ◈ 보통 primary key 값을 생성하기 위해 사용합니다.
 
 ◈ 메모리에 Cache되었을 때 Sequence 값의 액세스 효율이 증가 합니다.
 
 ◈ Sequence는 테이블과는 독립적으로 저장되고 생성됩니다. 따라서 하나의 sequence를
 여러 테이블에서 쓸 수 있습니다.
 
 |  
| 
 시퀀스 생성
 
 
  
  
 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을 사용하여
 자동으로 입력할 수 있습니다.
 
 CURRVAL : 현재 값을 반환 합니다. .
 NEXTVAL : 현재 시퀀스값의 다음 값을 반환 합니다.
 
 
 SQL>SELECT emp_seq.CURRVAL FROM DUAL ;
 
 CURRVAL
 ---------
 1
 
 SQL>SELECT emp_seq.NEXTVAL FROM DUAL ;
 
 NEXTVAL
 ---------
 2
 
 |  
| 
 사용규칙
 
 ◈ 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값
 
 
 시퀀스의 수정 및 삭제
 
 
  
  
 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.
 
 |  | 
|  | 
|  | 
| ================================================ * 오라클 정보공유 커뮤니티 oracleclub.com
 * http://www.oracleclub.com
 * http://www.oramaster.net
 * 운영자 : 김정식 (oramaster _at_ naver.com)
 ================================================
 | 
| ※ oracleclub 강좌를 다른 홈페이지에 퍼가실 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^ |