`
zzx0421
  • 浏览: 98973 次
  • 性别: 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
分享到:
评论

相关推荐

    oracle快速批量生成表和触发器和序列.zip

    3. **序列(Sequence)**:Oracle序列是一种自增数字生成器,常用于生成唯一的ID,尤其是在没有自动增长字段的表中。使用`CREATE SEQUENCE`语句可以创建序列,可以指定初始值、增长步长、是否循环等属性。批量生成...

    Oracle 删除所有表,视图,序列,函数,存储过程等SQL

    ### Oracle删除所有表、视图、序列、函数、存储过程等SQL知识点详解 #### 一、概述 在Oracle数据库管理中,有时会遇到需要彻底清除某个模式下的所有对象的情况,如表、视图、序列、函数、存储过程或包等。这种需求...

    oracle存储过程

    在上述例子中,变量`n_number`和`n_Temp`被用来在`YW.SEQ_RESET`存储过程中管理序列值。这个过程通过改变序列的增量来重置序列值,以满足特定的需求。 三、YW上的存储过程`YW.SEQ_RESET` 该存储过程`YW.SEQ_RESET`...

    Oracle导出Clob,Blob工具版本2

    Oracle数据库在存储大对象(BLOB和CLOB)时提供了强大的功能,但处理这些类型的数据进行导入导出可能会带来挑战。"Oracle导出Clob,Blob工具版本2" 是一个专为解决这个问题而设计的应用程序,它改进了对CLOB...

    dbutils + oracle 增删改查批量插入示例

    在Oracle数据库的背景下,我们需要了解Oracle的一些特性,如PL/SQL、游标、序列、索引等。Oracle以其高性能、高可用性和强大的数据管理能力在企业级应用中广泛应用。 本示例中,"dbutils + oracle 增删改查批量插入...

    MyBatis Oracle 自增序列的实现方法

    1. 创建Oracle序列对象。 2. 在MyBatis映射文件中使用`<selectKey>`标签在插入前获取序列值。 3. 将获取的序列值插入到对应的主键字段。 4. 确保`parameterType`中的对象有对应的属性来接收自增序列的值。 通过以上...

    Oracle开发笔记

    "Oracle开发笔记" Oracle 是一种关系型数据库...Oracle 开发笔记提供了许多有价值的知识点,涵盖了序列建立、存储过程、常用函数、异常处理、游标实现和语句优化等方面,都是 Oracle 开发者们必须掌握的重要技能。

    oracle,sysbase调试脚本!

    【Oracle 存储过程调试】 ...总的来说,这些文件内容可能涵盖了Oracle的存储过程编写、调试技巧、日志记录、动态SQL以及序列管理等多个方面,对理解和优化Oracle数据库应用程序开发具有重要的参考价值。

    oracle向达梦数据库迁移

    需要将Oracle中的存储过程、触发器等PL/SQL代码转换为DMPL,或寻找等价的功能实现。 九、迁移结果核对 完成所有步骤后,进行详尽的对比检查,验证表结构、数据、权限和程序是否与Oracle一致,确保无误。 十、...

    Oracle教程

    10. 序列、同义词、PLSQL、游标和存储过程:序列用于生成唯一的数值序列,同义词可以用来简化对象的引用。PLSQL是Oracle提供的过程化语言,游标用于处理结果集,存储过程则可以封装业务逻辑。 11. 触发器、事务和...

    c# 安泰家具销售系统 源码 + 数据库中脚本(包,存储过程,序列,函数,触发器等)

    在安泰家具销售系统中,存储过程可能用于批量插入、更新或者删除数据,以及执行一些复杂的查询,以提高数据处理速度和减少网络通信。 序列是Oracle中用于生成唯一整数的一种对象,常用于自动填充主键字段,保证数据...

    关于从SQL2008到Oracle方法总结

    迁移完成后,Oracle数据库中将会包含对应的表结构、序列和触发器。 ##### 3. 视图的移植 视图的移植相对复杂一些,需要使用Sql Developer中的“转换草稿编辑器”。 1. 打开Sql Developer,选择“工具”->"移植"->...

    oracle课程设计

    总的来说,这个Oracle课程设计项目不仅锻炼了开发者在C#.NET环境下的编程技能,也深入学习了Oracle数据库的高级特性,如存储过程、触发器和序列的使用,对于理解数据库管理和应用开发具有很高的实践价值。...

    cmd下自动安装oracle.7z

    在Oracle的自动安装过程中,批处理脚本会调用相应的安装程序和配置工具,并传递响应文件的路径和其他必要参数,以完成整个安装过程。编写这样的脚本需要对DOS命令和Oracle安装流程有深入理解。 5. **Oracle 11g**: ...

    Oracle笔试题库之问答题篇

    我们可以总结出一系列与Oracle数据库管理相关的知识点,这些知识点涵盖了从基本的表空间和表管理,到数据复制、用户管理、数据库模板选择、OMS使用,再到物理文件类型、日志文件工作模式、序列创建、SQL语句应用,...

    Oracle.ManagedDataAccess.dll

    7. 高级特性支持:包括游标、批量操作、连接池、预编译的SQL语句(存储在PL/SQL程序单元中)、LOB数据类型处理、XMLType支持、Oracle序列、触发器、函数和过程调用等。 8. 异常处理:OracleException类用于捕获和...

    Oracle课件.pdf

    在Oracle方面,安装过程涉及多个步骤,包括环境检查、安装软件、配置网络服务和初始化数据库。安装完成后,系统会创建一些默认用户,如SYSDBA和SYSTEM,它们拥有高级权限,用于数据库管理和维护。服务器连接通常通过...

Global site tag (gtag.js) - Google Analytics