출처] http://blog.naver.com/royalwang?Redirect=Log&logNo=100148098982



CREATE OR REPLACE PROCEDURE SEQUENCE_RESET(S_NAME IN VARCHAR2)

AS S_VALUE INTEGER;

BEGIN

execute immediate 'alter sequence ' || S_NAME || ' minvalue 0';

execute immediate 'select ' || S_NAME || '.nextval from dual' into S_VALUE ;

execute immediate 'alter sequence ' || S_NAME || 'increment by -'|| S_VALUE ;

execute immediate 'select ' || S_NAME || '.nextval from dual' into S_VALUE ;

execute immediate 'alter sequence ' || S_NAME || 'increment by 1';

END;



PL/SQL에서 Sequence를 생성하고 삭제하려고 했더니

DCL자체가 안 먹히는 듯.


그래서 위 게시물의 방법을 이용하여 실제로 프로젝트에 적용시켜 보기로 했다.


SEQUENCE_RESET 프로시져를 생성하여 패키지에서 호출해 쓰려고 하였으나, 알지 못하는 이유로 실패..

아래처럼 프로시져 내용을 통째로 옮겨넣고 진행하였다.


미리 seq_bgtmap 라는 시퀀스를 생성한 후에, 

아래처럼 해보자.


   Procedure sp_Copy_Bgtdtl(

             p_bgt_yy          in varchar2,

             p_inp_emp         in varchar2,

             CurQue_mB646      in out Que_mB646Cursor) IS

      temp_seq integer;

   Begin

     

      execute immediate 'alter sequence seq_bgtmap minvalue 0';

      execute immediate 'select seq_bgtmap.nextval from dual' into temp_seq;

      execute immediate 'alter sequence seq_bgtmap increment by -'||temp_seq;

      execute immediate 'select seq_bgtmap.nextval from dual' into temp_seq;

      execute immediate 'alter sequence seq_bgtmap increment by 1';


      insert into bgtmap(bgt_yy       , map_id       , prgm_id      , bugt_cd      ,

.

.

.

.



결과는 굿.


Posted by 야동우
,