2012년 1월 18일 수요일

오라클의 sequence 시작값 초기화 또는 변경 하기


오라클의 sequence는 alter 구문으로 시작값을 변경 할 수 없다.

그래서 sequence 의 start 값을 초기화하거나 다른 값으려 하려고 하면
sequence를 drop 한 후 새로 생성해 줘야한다.

이 방법이 가장깔끔하긴 한데..가끔 drop, create 권한이 없을 경우 문제가 된다.
그래서 약간의 꽁수를 이용해서 drop 하지 않고 sequence를 초기화 하는 방법이다.



CREATE OR REPLACE PROCEDURE P_RESET_SEQ( SEQ_NAME IN VARCHAR2 )
IS
    L_VAL NUMBER;
BEGIN
    EXECUTE IMMEDIATE 'select ' || SEQ_NAME || '.nextval from dual' INTO L_VAL;

    EXECUTE IMMEDIATE 'alter sequence ' || SEQ_NAME || ' increment by -' || L_VAL || ' minvalue 0';

    EXECUTE IMMEDIATE 'select ' || SEQ_NAME || '.nextval from dual' INTO L_VAL;

    EXECUTE IMMEDIATE 'alter sequence ' || SEQ_NAME || ' increment by 1 minvalue 0';
END;

위와 같이 하면 sequence의 시작값이 0으로 된다.
만일 시작값을 300으로 하고 싶다면 위 구문 적은 다음에

for i 0..300 loop
    EXECUTE IMMEDIATE 'select ' || SEQ_NAME || '.nextval from dual' INTO L_VAL;
end loop;

요 구문 추가해주면 된다.

댓글 없음:

댓글 쓰기