Oracle重置序列(不删除重建方式)
2016-01-14 10:35
721 查看
Oracle中一般将自增sequence重置为初始1时,都是删除再重建,这种方式有很多弊端,依赖它的函数和存储过程将失效,需要重新编译。
不过还有种巧妙的方式,不用删除,利用步长参数,先查出sequence的nextval,记住,把递增改为负的这个值(反过来走),然后再改回来。
假设需要修改的序列名:seq_name
可以写个存储过程,以下是完整的存储过程,然后调用传参即可:
不过还有种巧妙的方式,不用删除,利用步长参数,先查出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;
相关文章推荐
- Oracle树查询(查询所有子节点,父节点等等)
- AP:PaymentTerms 的设置&Invoice batch 知识点。
- Oracle buffer cache与相关的latch等待事件
- plsql连接oracle客户端异常解决方案
- oracle表空间查询维护命令大全之三(暂时表空间)史上最全
- mysql与oracle区别
- 本地ORACLE忘记SYS用户密码解决方法
- ORACLE-020:ORACLE技巧002 批量操作表
- oracle安装问题_操作系统
- oracle查询表信息
- Linux下重启oracle
- 在Linux系统上同时监控多个Oracle数据库表空间的方法
- oracle数据中删除数据时提示“记录被另一个用户锁住”
- node-oracledb 连接 RAC集群
- 部署Oracle Data Guard
- Oracle RMAN Recover中使用BBED 跳过缺失的归档 继续 Recover 的测试
- 【转】oracle模糊查询效率提高
- Ubuntu下wget Oracle JDK1.7
- Oracle - 数据库的实例、表空间、用户、表之间关系
- 减少Oracle占用内存