hyeonga_code

Database_57_데이터베이스 객체_시퀀스_Sequence 본문

Oracle Database

Database_57_데이터베이스 객체_시퀀스_Sequence

hyeonga 2023. 8. 13. 05:59
반응형

-- 데이터베이스 객체
    -- 시퀀스
        -- 고유 번호를 자동으로 생성합니다.
        -- 공유가 가능한 객체입니다.
        -- 일반적으로 기본 키 값을 생성하는 데에 사용합니다.
        -- 응용 프로그램 코드를 대체합니다.
        -- 생성
            /*
            CREATE SEQUENCE sequence
                [ INCREMENT BY n ] : 증가 값을 지정합니다.
                [ START WITH n ]    : 시작 값을 지정합니다.
                [ { MAXVALUE n | NOMAXVALUE } ] : 시퀀스의 최대값을 지정합니다.
                [ { MINVALUE n | NONMINVALUE } ] : 시퀀스의 최소값을 지정합니다.
                [ { CYCLE | NOCYCLE } ] : 최대값에 도달하는 경우 순환의 여부를 지정합니다.
                [ { CACHE n | NOCACHE } ] : 원하는 숫자 만큼 미리 생성해 두는 지에 대한 여부를 지정합니다.
            */

-- 존재하는 테이블을 삭제합니다.(없는 경우 오류)
DROP TABLE dept PURGE;
DROP TABLE emp PURGE;

-- 시퀀스를 생성합니다.
CREATE SEQUENCE dept_deptno_seq
                            INCREMENT BY 10
                            START WITH 200
                            NOCACHE
                            NOCYCLE;
    /*
    Sequence DEPT_DEPTNO_SEQ이(가) 생성되었습니다.
    */

-- 부서 테이블을 생성합니다.
CREATE TABLE dept
AS 
SELECT department_id, department_name
FROM departments;
    /*
    Table DEPT이(가) 생성되었습니다.
    */
    
-- 직원 테이블을 생성합니다.
CREATE TABLE emp
AS 
SELECT employee_id, last_name, department_id
FROM employees;
    /*
    Table EMP이(가) 생성되었습니다.
    */

-- 시퀀스 요소 확인
DESC user_sequences;
    /*
     이름                            널?               유형           
    -------------------------------------------------------------------- 
    SEQUENCE_NAME   NOT NULL    VARCHAR2(30) 
    MIN_VALUE                                     NUMBER       
    MAX_VALUE                                    NUMBER       
    INCREMENT_BY       NOT NULL    NUMBER       
    CYCLE_FLAG                                  VARCHAR2(1)  
    ORDER_FLAG                                 VARCHAR2(1)  
    CACHE_SIZE            NOT NULL    NUMBER       
    LAST_NUMBER        NOT NULL    NUMBER      
    */

-- 시퀀스의 정보를 확인합니다.
SELECT sequence_name, increment_by, last_number
FROM user_sequences;



-- 부서 테이블 정보를 조회합니다.
SELECT * FROM dept;


    
-- 부서 테이블에 시퀀스를 적용하여 데이터를 삽입합니다.
INSERT INTO dept
VALUES(dept_deptno_seq.NEXTVAL, 'Sales2');
    /*
    1 행 이(가) 삽입되었습니다.
    */

-- 부서 테이블의 정보를 조회합니다.
SELECT * FROM dept;
        -- 마지막 번호인 190번에 증가값 10을 더한 200으로 삽입되었습니다.



-- 데이터를 삽입 전으로 되돌립니다.
ROLLBACK;
    /*
    롤백 완료.
    */

-- 시퀀스를 활용하여 데이터를 삽입합니다.
INSERT INTO dept
VALUES(dept_deptno_seq.NEXTVAL, 'Sales2');
    /*
    1 행 이(가) 삽입되었습니다.
    */

-- 부서 테이블을 조회합니다.
SELECT * FROM dept;
        -- 200번을 삭제하였지만 마지막 번호였으므로 200+10 번으로 지정됩니다.



        -- 시퀀스 확인
            /*
            SELECT sequenct_name, min_value, max_value, increment_by, last_number
            FROM user_sequences;
            */
            -- NEXTVAL :  사용이 가능한 다음 시퀀스 값을 반환합니다.
            -- CURRVAL : 현재 시퀀스 값을 반환합니다.
SELECT sequence_name, min_value, max_value, increment_by, last_number
FROM user_sequences;



-- 현재 시퀀스 번호를 확인합니다.
SELECT dept_deptno_seq.CURRVAL
FROM dual;



        -- 시퀀스 수정
            -- 증가값, 최대값, 최소값, CYCLE 옵션, CACHE 옵션을 변경할 수 있습니다.
            /*
            ALTER SEQUENCE sequence
                                    INCREMENT BY n
                                    MAXVALUE n
                                    MINVALUE n
                                    NOCHACHE
                                    NOCYCLE;
                    -- START WITH 절은 사용할 수 없습니다.
                        -- 시퀀스의 시작 값을 변경하려면 시퀀스를 삭제한 후 다시 생성해야 합니다.
            */

-- 시퀀스 증가값을 20으로 변경합니다.
ALTER SEQUENCE dept_deptno_seq
INCREMENT BY 20;

SELECT object_name, object_type, created, status
FROM user_objects
WHERE object_name LIKE 'DEPT%';



        -- 시퀀스 제거
            -- 제거된 시퀀스는 더 이상 참조할 수 없습니다.
            /*
            DROP SEQUENCE sequence;
            */
    
-- 시퀀스를 삭제합니다.
DROP SEQUENCE dept_deptno_seq;
    /*
    Sequence DEPT_DEPTNO_SEQ이(가) 삭제되었습니다.
    */

반응형