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

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
时间: 2024-08-25 18:30:06

Oracle重置序列(不删除重建方式)的相关文章

oracle 重置序列从指定数字开始的方法详解

原文 oracle 重置序列从指定数字开始的方法详解 重置oracle序列从指定数字开始 declare n number(10); v_startnum number(10):=10000001;--从多少开始 v_step number(10):=1;--步进 tsql varchar2(200); v_seqname varchar2(200):='MIP_JF_SEQUENCE';--序列名 begin execute immediate 'select '||v_seqname||'.

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

Oracle中一般将自增sequence重置为初始1时,都是删除再重建,这种方式有很多弊端,依赖它的函数和存储过程将失效,需要重新编译.不过还有种巧妙的方式,不用删除,利用步长参数,先查出sequence的nextval,记住,把递增改为负的这个值(反过来走),然后再改回来. 假设需要修改的序列名:seq_name 1.select seq_name.nextval from dual; //假设得到结果5656 2.alter sequence seq_name increment by -5

Oracle 重置序列

Oracle将自增sequence重置为初始值1时,若是删除再重建,那么依赖它的函数和存储过程将失效,需要重新编译. 这里利用相反的过程,利用负值步长参数,将递增值改为(sequence.NEXTVAL-1),然后再改回来. 假设需要修改的序列名:seq_name 1.select seq_name.nextval from dual; //假设得到结果5656 2.alter sequence seq_name increment by -5655; //注意是-(n-1) 3.select

Oracle修改序列(Sequence)起始值的方法

Oracle修改序列(Sequence)起始值的方法 Oracle 序列(Sequence)主要用于生成流水号,在应用中经常会用到,特别是作为ID值,拿来做表主键使用较多. 但是,有时需要修改序列初始值(START WITH)时,有同仁使用这个语句来修改:alter sequence sequencename start with xxxxxxxx.但是,在Oracle DB中,修改序列没有这样的语法.下面介绍几种修改方式: 1.先删除序列,然后重新创建.不过这不是当前要讲的重点.这个方法比较暴

Excel工作常用(一)-生成序列与删除空行

整理一些工作中,本人经常用到的一些Excel操作 1.自动生成序列 [注]选择 第一格 和 第二格 之后,在右下角出现十字的时候,在往下拉 2.删除空行 方式一,先找出所有空行,在删 [缺点]数据多的话,会很慢 方式二,直接筛选出空行,然后不显示,速度快

Oracle的序列

Oracle的序列 序列介绍 序列是Oracle提供的用于产生一系列唯一数字的数据库对象.使用序列可以实现自动产生主键值.序列也可以在许多用户并发环境中使用,为所有用户生成不重复的顺序数字,而且不需要任何额外的I/O开销. 与视图一样,序列并不占用实际的存储空间,只是在数据字典中保存它的定义信息.用户要在自己的模式中创建序列,必须具有CREATE SEQUECNCE系统权限,如果要在其他模式中创建序列,则必须具有CREATE ANY SEQUENCE系统权限. 创建序列的语法如下: CREATE

Oracle中序列的操作以及使用前对序列的初始化

Oracle中序列的操作以及使用前对序列的初始化 一 创建序列 create sequence myseq start with 1 increment by 1 nomaxvalue minvalue 1 二 初始化序列 select myseq.nextval from dual; 这里值得注意的是,如果先直接写select myseq.currval from dual,会提示会提示myseq.currtval尚未在此会话中定义. www.2cto.com 三 使用序列 初始化序列之后才可

Oracle RAC Study之--删除VOTE DISK

Oracle RAC Study之--删除VOTE DISK 环境: 操作系统: AIX 5300-09 集群软件: CRS 10.2.0.1 数据库:   Oracle 10.2.0.1 构建AIX平台下RAC 依据共享存储的使用方式可以分两种: 1.建立基于并发卷组(VG concurrent)的共享存储 2.建立基于ASM下的RAW的共享存储 如下图所示: 本案例是用于基于VG Concurrent 的共享存储: 在添加了vote disk后,主机重新启动后,出现以下错误,并且CRS se

Oracle性能分析9:重建索引

当索引出现问题时,会导致严重的性能问题,索引问题包括索引不可用.索引碎片导致性能下降,我们需要一些手段在检测索引的问题,并解决这些问题.这一篇将为你讲述怎么定位索引问题,并提供了解决的办法. 索引不可用 索引不可用的原因有很多,包括: 1)索引空间耗尽,导致SQL*Loader更新索引失败: 2)创建索引的过程中实例失败: 3)唯一键有重复值: 4)某个索引的顺序与sorted indexes子句中指定的顺序不同: 5)移动表或表分区(alter table move和alter table m