|
|
|
| [일반] 오라클의 sequence 초기화 |
|
| 호석 님께서 쓴 글입니다 - 121.♡.39.7 |
읽음:3177 |
|
|
오라클의 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;
출처 : http://sqler.pe.kr/web_board/view_list.asp?id=251&part=myboard8&block=0&gotopage=2&tip=
위와 같이 하면 sequence의 시작값이 0으로 된다.
만일 시작값을 300으로 하고 싶다면 위 구문 적은 다음에
for i 0..300 loop
EXECUTE IMMEDIATE 'select ' || SEQ_NAME || '.nextval from dual' INTO L_VAL;
end loop;
요 구문 추가해주면 된다.
|
|
|

|