Oracle重置序列(不删除重建方式)

摘要:
Oracle中的序列通常用于生成序列号,因此需要重新设置。虽然我们可以通过重新编译来重置序列,但这种方法有缺点,例如导致与序列相关的存储过程或函数失败,这需要重新编译;因此,我们需要一种方法来重置序列而不进行编译——这种方法不进行删除,使用step参数来查找序列的下一个值,记住,将增量更改为负值,然后将其更改回。

Oracle 中的序列我们一般用来生成流水号,所以需要进行重置(如每天凌晨重置一次),我们虽然可以通过重新编译的方式重置序列,可是这种方法会有弊端,比如导致与该序列相关的存储过程或函数失效等等,需要重新编译;于是就需要一种不编译也可以重置序列的方法——

这种方式,不用删除,利用步长参数,先查出sequence的nextval,记住,把递增改为负的这个值(反过来走),然后再改回来。

 假设需要修改的序列名:seq_name

1、select seq_name.nextval from dual; //假设得到结果5656

2、 alter sequence seq_name increment by -5655; //注意是-(n-1)

3、 select seq_name.nextval from dual;//再查一遍,走一下,重置为1了

4、  alter sequence seq_name increment by 1;//还原

可以写个存储过程,以下是完整的存储过程,然后调用传参即可: 

create or replace procedure seq_reset(v_seqname varchar2) as n number(10);
tsql varchar2(100);
begin
execute immediate 'select '||v_seqname||'.nextval from dual' into n;
n:=-(n-1);
tsql:='alter sequence '||v_seqname||' increment by '|| n;
execute immediate tsql;
execute immediate 'select '||v_seqname||'.nextval from dual' into n;
tsql:='alter sequence '||v_seqname||' increment by 1';
execute immediate tsql;
end seq_reset;

转自:http://www.cnblogs.com/huangzhen/archive/2011/09/19/2181257.html

免责声明:文章转载自《Oracle重置序列(不删除重建方式)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇redis的一些优缺点itext生成pdf(附带页眉,页脚,页码)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Oracle中使用escape关键字实现like匹配特殊字符,以及&字符的转义

转:http://blog.chinaunix.net/uid-26896647-id-3433968.html 问题描述:如果在一个表中的一个字段上存在'&', '_', '%'这样的特殊字符,而我们又得在where条件中使用到这些特殊字符怎么办? 1.创建含有这些特殊字符的表 SQL> create table t_test_e...

oracle中建立函数?如何查看自己都建立了哪些函数?

SQL PLUS下:查看建了哪些函数,注意,引号内大写select object_name from user_objects where object_type='FUNCTION';查看函数内容,引号内为你要查询的函数名,也要大写select text from user_source where name='函数名'; PLSQL Developer...

在oracle中自动大批量生成测试数据

方法1: SQL> create table b as select 1 id from dual connect by level<=100;    方法2:   SQL> create table a (id int);   Table created.   SQL> insert into a select 1 from d...

Oracle二三事之 EBS升级

原文转载:http://tech.it168.com/a2012/1121/1425/000001425400.shtml 对于初次执行这个过程的人而言,我们需要在规划阶段理清一些问题。许多人经历过以前的Oracle EBS升级,但是R12版本的升级与以前大不相同,需要使用一些不同的方法。 在与许多公司进行经验交流时,有一个问题总是困扰我:创建第一个可用实...

Oracle中为表设置自动增长的标识列

-- 创建序列create sequence 序列名称       start with 1 -- 起始值       increment by 1 -- 增量       maxvalue 99999999 -- 最大值       nocycle -- 达到最大值后是否重新计算,当前为不重新计算,cycle为重新计算       nocache; --...

Mysql----浅入浅出之视图、存储过程、触发器

一、视图 VIEW 视图是虚拟的表,本身不存储不论什么数据。仅仅有执行时,才包括动态检索出来的数据。 eg:SELECT sid, name, sex, s_num FROM  student, school WHERE sid = 2 AND student.sid = scholl.sid ; 这个简单的查询涉及到两个表。 所以不论什么须要这个数据的...