转载自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;
分享到:
相关推荐
在schema browser的帮助下,可以方便的浏览数据库内部的各类数据库对象,比如表,索引,序列,存储过程等,而且可以方便的倒出DDL语句和进行各种修改,重建工作。定位到某一类对象上,这列对象允许的操作都会自动列...
35、MySQL、SqlServer、oracle写出字符存储、字符串转时间 52 36、update语句可以修改结果集中的数据吗? 53 37、oracle如何设置主键自动增长? 53 38、表连接、子查询的区别是什么?它们可以相互转化吗?你倾向于用...
实例076 批量替换某一类字符串 95 实例077 把异常与错误信息显示到窗体中 97 实例078 从字符串中分离文件路径、 文件名及扩展名 98 实例079 判断手机号的合法性 99 实例080 用字符串构建器追加字符 100 实例081 去掉...
88 <br>0136 如何进行文本加密与解密 88 <br>0137 如何区别0、空字符串、Null、Empty和Nothing 89 <br>0138 从字符串中分离文件路径、文件名及扩展名 89 <br>0139 如何批量替换某一类字符串 89...
序列化 nIo 匿名类 包装类 优先级 引用 语言工具类库 容器类 集合 链表 map 工具类 系统类 日期类 数字类 字符串+正则 流 字符流 字节流 语言特性 继承 封装 多态 JVM 多线程与并发 GC...
学生提问:能不能只分配内存空间,不赋初始值呢?89 4.5.4 使用数组 90 学生提问:为什么要我记住这些异常信息? 91 4.5.5 JDK1.5提供了foreach循环 91 4.6 深入数组 93 4.6.1 内存中的数组 93 学生提问:为...
容易维护扩展(不需要修改主类就可以添加新的API支持) 注入型解释器(依据不同的返回格式注入相应的解释器) 集中管理请求参数与参数映射 以运行时异常的方式来管理错误的响应 使用泛型来做强类型编程 多协议扩展...
容易维护扩展(不需要修改主类就可以添加新的API支持) 注入型解释器(依据不同的返回格式注入相应的解释器) 集中管理请求参数与参数映射 以运行时异常的方式来管理错误的响应 使用泛型来做强类型编程 多协议扩展...
容易维护扩展(不需要修改主类就可以添加新的API支持) 注入型解释器(依据不同的返回格式注入相应的解释器) 集中管理请求参数与参数映射 以运行时异常的方式来管理错误的响应 使用泛型来做强类型编程 多协议扩展...
容易维护扩展(不需要修改主类就可以添加新的API支持) 注入型解释器(依据不同的返回格式注入相应的解释器) 集中管理请求参数与参数映射 以运行时异常的方式来管理错误的响应 使用泛型来做强类型编程 多协议扩展...
容易维护扩展(不需要修改主类就可以添加新的API支持) 注入型解释器(依据不同的返回格式注入相应的解释器) 集中管理请求参数与参数映射 以运行时异常的方式来管理错误的响应 使用泛型来做强类型编程 多协议扩展...
容易维护扩展(不需要修改主类就可以添加新的API支持) 注入型解释器(依据不同的返回格式注入相应的解释器) 集中管理请求参数与参数映射 以运行时异常的方式来管理错误的响应 使用泛型来做强类型编程 多协议扩展...
容易维护扩展(不需要修改主类就可以添加新的API支持) 注入型解释器(依据不同的返回格式注入相应的解释器) 集中管理请求参数与参数映射 以运行时异常的方式来管理错误的响应 使用泛型来做强类型编程 多协议扩展...
容易维护扩展(不需要修改主类就可以添加新的API支持) 注入型解释器(依据不同的返回格式注入相应的解释器) 集中管理请求参数与参数映射 以运行时异常的方式来管理错误的响应 使用泛型来做强类型编程 多协议扩展...