ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • ORACLE SEQUENCE
    IT/DB 2024. 10. 18. 09:26
    728x90
    반응형

    Oracle의 시퀀스 생성과 관련 Triger

     

    1. SEQUENCE 생성과 사용

      a. 생성

        CREATE SEQUENCE baccount_seq
            START WITH 1
            INCREMENT BY 1
            MAXVALUE 100000 ;

           --> 시작 값이 1이고 1씩 증가하고, 최대값이 100000만이 되는 시퀀스를 생성

      b. 사용
         insert into baccount(seq, id, name, cdclass, writedate)
                 values(baccount_seq.nextval, '110110', 'test', 2, sysdate)

          --> seq는 컬럼값을 입력할 때 일일이 다음 값을 기억하지 않아도 NEXTVAL을

                사용하여  자동으로 입력

            *** 값 조회

              CURRVAL : 현재 값을 반환 합니다. .
              NEXTVAL : 현재 시퀀스값의 다음 값을 반환 합니다.

     

              SELECT baccount_seq.CURRVAL FROM DUAL;
              SELECT baccount_seq.NEXTVAL FROM DUAL;

     

    2. Triger를 이용한 자동 채번

       a. 생성
        CREATE OR REPLACE TRIGGER baccount_trigger BEFORE INSERT ON baccount

             FOR EACH ROW
           BEGIN
                SELECT baccount_seq.NEXTVAL INTO :new.seq FROM dual;
           END;

        b.사용

           insert into baccount(id, name, cdclass, writedate)
                 values('110110', 'test', 2, sysdate)

          --> 순번을 명시적으로 참조 하지 않고 저장

     

    ** 참조 테이블

    CREATE TABLE EUSER.baccount
    (
     seq NUMBER ( 16 )  NOT NULL ,
     id  CHAR ( 32 ) ,
     name VARCHAR2 ( 64 ) ,
     text VARCHAR2 ( 500 ) ,
     cdclass number ( 2 ) ,
     applyfrom DATE,
     applyto DATE,
     useyn CHAR ( 1 ) ,
     userid CHAR ( 12 ) ,
     writedate DATE,
     CONSTRAINT PK_baccount PRIMARY KEY ( seq)
    )

     

    ** 제거
    drop TRIGGER euser.baccount_trigger
    drop table euser.baccount
    drop SEQUENCE euser.baccount_seq

     

    Goover가 얘기하는 Sequence는

    Oracle Database에서 SEQUENCE는 데이터베이스 객체로, 유일한 값을 자동으로 생성하는 데 사용됩니다. 주로 기본키(Primary Key)의 값 또는 다른 식별자의 생성에 활용되며, 여러 테이블에서 동시에 사용할 수 있어 데이터의 무결성을 유지하는 데 중요한 역할을 합니다.

    SEQUENCE의 기본 개념

    SEQUENCE는 데이터를 삽입할 때마다 고유하고 순차적인 숫자를 생성하는 데이터베이스 오브젝트입니다. 이를 통해 데이터베이스에서 데이터의 추가 및 관리를 보다 용이하게 할 수 있습니다. 예를 들어, 사용자 ID, 주문 번호 등 고유한 식별자가 필요한 여러 상황에서 SEQUENCE가 많이 사용됩니다.

    SEQUENCE 생성 방법

    Oracle에서 SEQUENCE를 생성하는 것은 매우 간단합니다. 다음은 SEQUENCE를 만드는 SQL 문법입니다:

    CREATE SEQUENCE sequence_name
    START WITH initial_value
    INCREMENT BY increment_value
    NOCACHE
    NOCYCLE;
    
    • sequence_name: 생성할 시퀀스의 이름.
    • START WITH: 시퀀스가 시작할 초기 값.
    • INCREMENT BY: 값의 증가치(예: 1).
    • NOCACHE: SEQUENCE에 대해 메모리에 캐시된 값을 사용하지 않도록 설정.
    • NOCYCLE: 최대값에 도달하면 다시 시작하지 않도록 설정.

    예를 들어, 다음과 같이 SEQUENCE를 정의할 수 있습니다.

    CREATE SEQUENCE MEMBER_SEQ 
    START WITH 1 
    INCREMENT BY 1 
    NOCYCLE;
    

    이렇게 하면 MEMBER_SEQ라는 이름의 시퀀스가 생성되며, 1부터 시작하여 매번 1씩 증가하는 값을 제공합니다.

    SEQUENCE 사용하기

    SEQUENCE에서 생성된 값을 사용하는 방법도 쉽습니다. 일반적으로 NEXTVAL을 통해 다음 값을 얻을 수 있습니다. 예를 들어, 다음 SQL 쿼리는 SEQUENCE에서 다음 값을 가져와 사용하는 방법입니다:

    INSERT INTO members (id, name) 
    VALUES (MEMBER_SEQ.NEXTVAL, 'John Doe');
    

    이 쿼리는 members 테이블에 새로운 레코드를 삽입하며, id 필드는 자동으로 증가된 값을 사용합니다.

    SEQUENCE의 장점

    1. 유일성 보장

    SEQUENCE는 자동으로 고유한 숫자를 생성하므로 사용자 입력 오류를 방지하고, 기본키의 유일성을 보장합니다.

    2. 성능 최적화 가능

    SEQUENCE는 캐시 기능을 지원하여, 성능을 최적화할 수 있습니다. 예를 들어, CACHE 옵션을 사용하여 미리 여러 개의 값을 메모리에 저장해 두면, 빈번한 데이터베이스 호출을 줄일 수 있습니다.

    CREATE SEQUENCE MEMBER_SEQ 
    START WITH 1 
    INCREMENT BY 1 
    CACHE 50;
    

    이렇게 설정하면, SEQUENCE는 한 번에 50개의 값을 메모리에 미리 생성하여 성능을 개선할 수 있습니다.

    SEQUENCE의 사용 시 주의 사항

    • Rollback 시 값 소실: SEQUENCE에서 생성된 값은 트랜잭션이 롤백되더라도 버려지므로, 가끔 불일치가 발생할 수 있습니다. 이는 관리자가 알고 있어야 할 중요한 사항입니다.
    • 시퀀스의 재사용: SEQUENCE는 CYCLE 옵션을 사용하면 최대값에 도달하면 다시 시작할 수 있으나, 이 경우 관리에 주의해야 합니다.

    결론

    Oracle의 SEQUENCE는 데이터베이스의 유일한 식별자 생성에 유용한 도구입니다. 기본키 설정이나 고유번호 생성 등 여러 용도로 사용할 수 있으며, 성능 최적화 기능도 제공하므로 서버의 효율성을 높이는 데 기여합니다. SEQUENCE를 적절히 활용하면 데이터베이스 관리의 복잡성을 줄이고, 일관된 데이터 무결성을 유지할 수 있습니다.

    728x90

    'IT > DB' 카테고리의 다른 글

    DB2를 SQL-SERVER로  (1) 2024.10.18
    ORACLE에서 SELECT 시 LOCK 처리  (0) 2024.10.18
    DATETIME 필드에 값 넣기  (0) 2024.10.18
    SQL-SERVER 간단 TIP  (0) 2024.10.18
    DB에서 자동순번필드의 현재순번 구하기  (0) 2024.10.18
Designed by Tistory.