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;
요 구문 추가해주면 된다.
피드 구독하기:
댓글 (Atom)
댓글 없음:
댓글 쓰기