批量修改Oracle序列值的存储过程

使用Oracle序列来生成表主键值的时候 ,可能会碰到会根据主键值来修改相应序列的值。

    下面存储过程P_MODIFY_SEQUENCES完成这一目的。

  r:=F_MODIFY_SEQUENCE('SE_DATATYPE','T_DATATYPE','DDID'); 
     r:=F_MODIFY_SEQUENCE('SE_DATAITEM','T_DATAITEM','ITEMID');

把这个修改成要修改的序列名及对应表名和主键名,支持多序列。

create   or   replace   procedure  P_MODIFY_SEQUENCES  is
-- 更新各序列值
str_sql  varchar2 ( 4000 );
r boolean;

function  F_MODIFY_SEQUENCE(sequenceName  varchar2 ,taleName  varchar2 ,keyF  varchar2 ) return  boolean
is
  LastValue 
integer ;
  f_sql 
varchar2 ( 4000 );
  Next_num 
number ;
  Max_num 
number ;
begin
 f_sql:
= ' select max( ' || keyF || ' ) from  ' || taleName;
 
execute  immediate f_sql  into  Max_num;
 
if (Max_num  is   not   null then
      Next_num:
= Max_num + 1 ;
     f_sql:
= ' alter sequence  ' || sequenceName || '  increment by 1 nocache ' ;
     
execute  immediate f_sql;
     
-- f_sql:='select '||sequenceName||'.nextval from dual';
      -- execute immediate f_sql;
     f_sql: = ' alter sequence  ' || sequenceName || '  increment by 1 nocache ' ;
     
execute  immediate f_sql;
 
     loop
      f_sql:
= ' select  ' || sequenceName || ' .nextval from dual ' ;
      
execute  immediate f_sql  into  LastValue;
      
-- select SE_DATATYPE.nextval into LastValue from dual;    
       exit   when  LastValue  >=  Next_num  -   1 ;
      f_sql:
= ' select  ' || sequenceName || ' .nextval from dual ' ;
      
execute  immediate f_sql  into  LastValue;    
      
-- select SE_DATATYPE.nextval into LastValue from dual;
      end  loop;  
     f_sql:
= ' alter sequence  ' || sequenceName || '  increment by 1 cache 20 ' ;
     
execute  immediate f_sql;
 
end   if ;
 
commit ;
 
return  true;
 Exception
    
when  others  then
            
return  false; 
end  F_MODIFY_SEQUENCE;


begin  
     r:
= F_MODIFY_SEQUENCE( ' SE_DATATYPE ' , ' T_DATATYPE ' , ' DDID ' ); 
     r:
= F_MODIFY_SEQUENCE( ' SE_DATAITEM ' , ' T_DATAITEM ' , ' ITEMID ' ); 
end  P_MODIFY_SEQUENCES;
/
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值