`
zzx0421
  • 浏览: 97195 次
  • 性别: Icon_minigender_1
  • 来自: 株洲/深圳
社区版块
存档分类
最新评论

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

阅读更多
转载自http://blog.csdn.net/00081168/archive/2007/08/10/1736242.aspx
create or replace procedure p_modify_sequences is
  --更新各序列值的动态sql语句   
  str_sql varchar2(4000);
  --是否修改成功,未发生异常返回true   
  r boolean;

  --修改相应序列的nextval   
  --sequencename:序列名   
  --talename:由序列生成主键的表名   
  --keyf:由序列生成的主键名   
  function f_modify_sequence(sequencename varchar2,
                             talename     varchar2,
                             keyf         varchar2) return boolean is
    lastvalue integer;
    currvalue 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;
    dbms_output.put_line('表' || talename || '的' || keyf || '最大值为:' ||
                         max_num);
    if (max_num is not null) then
      next_num := max_num + 1;
      --修改序列的自增量为1   
      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;
      
        --当序列的下一个值>= 表中现有主键的最大值时退出循环   
        exit when lastvalue >= next_num - 1;
        --如果序列的下一个值小于表中现有主键的最大值时继续获取序列的下一个值   
        f_sql := 'select ' || sequencename || '.nextval from dual';
        execute immediate f_sql
          into lastvalue;
      
      end loop;
      --修改后的sequencename.currval仍为修改前的值,但sequencename.nextval值为中主键的最大值+1   
      f_sql := 'alter sequence ' || sequencename ||
               ' increment by 1 cache 20';
      execute immediate f_sql;
      dbms_output.put_line('序列' || sequencename || '的下一个值为' || lastvalue);
      dbms_output.put_line('');
    end if;
    commit;
    return true;
  exception
    when others then
      return false;
  end f_modify_sequence;

begin
  r := f_modify_sequence('SEQ_MENUCODE', 'T_BOSSMENU', 'MENUCODE');
  r := f_modify_sequence('SEQ_FEE',
                         'T_BSFEE',
                         'to_number(substr(FEE_NO,-12))');
end p_modify_sequences;



set serveroutput on;
exec p_modify_sequences;
  • seq.rar (1.1 KB)
  • 下载次数: 110
分享到:
评论

相关推荐

    Toad 使用快速入门

    在schema browser的帮助下,可以方便的浏览数据库内部的各类数据库对象,比如表,索引,序列,存储过程等,而且可以方便的倒出DDL语句和进行各种修改,重建工作。定位到某一类对象上,这列对象允许的操作都会自动列...

    Java面试宝典2020修订版V1.0.1.doc

    35、MySQL、SqlServer、oracle写出字符存储、字符串转时间 52 36、update语句可以修改结果集中的数据吗? 53 37、oracle如何设置主键自动增长? 53 38、表连接、子查询的区别是什么?它们可以相互转化吗?你倾向于用...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    实例076 批量替换某一类字符串 95 实例077 把异常与错误信息显示到窗体中 97 实例078 从字符串中分离文件路径、 文件名及扩展名 98 实例079 判断手机号的合法性 99 实例080 用字符串构建器追加字符 100 实例081 去掉...

    C#编程经验技巧宝典

    88 <br>0136 如何进行文本加密与解密 88 <br>0137 如何区别0、空字符串、Null、Empty和Nothing 89 <br>0138 从字符串中分离文件路径、文件名及扩展名 89 <br>0139 如何批量替换某一类字符串 89...

    【白雪红叶】JAVA学习技术栈梳理思维导图.xmind

    序列化 nIo 匿名类 包装类 优先级 引用 语言工具类库 容器类 集合 链表 map 工具类 系统类 日期类 数字类 字符串+正则 流 字符流 字节流 语言特性 继承 封装 多态 JVM 多线程与并发 GC...

    疯狂JAVA讲义

    学生提问:能不能只分配内存空间,不赋初始值呢?89 4.5.4 使用数组 90 学生提问:为什么要我记住这些异常信息? 91 4.5.5 JDK1.5提供了foreach循环 91 4.6 深入数组 93 4.6.1 内存中的数组 93 学生提问:为...

    java开源包1

    容易维护扩展(不需要修改主类就可以添加新的API支持) 注入型解释器(依据不同的返回格式注入相应的解释器) 集中管理请求参数与参数映射 以运行时异常的方式来管理错误的响应 使用泛型来做强类型编程 多协议扩展...

    java开源包11

    容易维护扩展(不需要修改主类就可以添加新的API支持) 注入型解释器(依据不同的返回格式注入相应的解释器) 集中管理请求参数与参数映射 以运行时异常的方式来管理错误的响应 使用泛型来做强类型编程 多协议扩展...

    java开源包2

    容易维护扩展(不需要修改主类就可以添加新的API支持) 注入型解释器(依据不同的返回格式注入相应的解释器) 集中管理请求参数与参数映射 以运行时异常的方式来管理错误的响应 使用泛型来做强类型编程 多协议扩展...

    java开源包3

    容易维护扩展(不需要修改主类就可以添加新的API支持) 注入型解释器(依据不同的返回格式注入相应的解释器) 集中管理请求参数与参数映射 以运行时异常的方式来管理错误的响应 使用泛型来做强类型编程 多协议扩展...

    java开源包6

    容易维护扩展(不需要修改主类就可以添加新的API支持) 注入型解释器(依据不同的返回格式注入相应的解释器) 集中管理请求参数与参数映射 以运行时异常的方式来管理错误的响应 使用泛型来做强类型编程 多协议扩展...

    java开源包5

    容易维护扩展(不需要修改主类就可以添加新的API支持) 注入型解释器(依据不同的返回格式注入相应的解释器) 集中管理请求参数与参数映射 以运行时异常的方式来管理错误的响应 使用泛型来做强类型编程 多协议扩展...

    java开源包10

    容易维护扩展(不需要修改主类就可以添加新的API支持) 注入型解释器(依据不同的返回格式注入相应的解释器) 集中管理请求参数与参数映射 以运行时异常的方式来管理错误的响应 使用泛型来做强类型编程 多协议扩展...

    java开源包4

    容易维护扩展(不需要修改主类就可以添加新的API支持) 注入型解释器(依据不同的返回格式注入相应的解释器) 集中管理请求参数与参数映射 以运行时异常的方式来管理错误的响应 使用泛型来做强类型编程 多协议扩展...

Global site tag (gtag.js) - Google Analytics