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

本文介绍了一种在Oracle数据库中通过存储过程调整序列值以匹配表中最大主键值的方法。该方法适用于多个表和序列的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用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 nullthen
      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;
/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值