赞
踩
- create or replace procedure updateAllSeqVal(varNum number) is
- seq_name varchar2(100);
- l_currval number; --序列的当前值
- cursor seq_cur is
- select ur.sequence_name from user_sequences ur;--将当前数据库所有序列的名称存放到游标中
- begin
- --dbms_output.enable(buffer_size=>null);
- open seq_cur;
- fetch seq_cur into seq_name;
- loop
- exit when not seq_cur%found;
-
- --dbms_output.put_line(seq_name);
-
- --修改数据库序列的下限
- execute immediate 'alter sequence '||seq_name||' minvalue -5000';
-
- --需要变化的数量
- execute immediate 'alter sequence '||seq_name||' increment by '||varNum;
-
- --给序列取下一个数
- execute immediate 'select '||seq_name||'.nextval from dual' into l_currval;
- --execute immediate 'select '||seq_name||'.nextval from dual' into l_currval;
-
- --将序列的递增情况,恢复为按1递增
- execute immediate 'alter sequence '||seq_name||' increment by 1';
-
- --将数据库序列的下限修改为1
- execute immediate 'alter sequence '||seq_name||' minvalue 1';
-
- --dbms_output.put_line(l_currval);
- fetch seq_cur into seq_name;
- end loop;
- close seq_cur;
- end;

- select * from user_sequences;
-
-
- begin
- updateAllSeqVal(10000);
- END;
- select * from user_sequences;
-
先创建存储过程,再执行! 适用场景:
现在需要将数据库中的所有sequence的当前值增加1000。
编写一个存储过程,传入1000,将所有sequence的值增加1000;若传入-1000,将所有的sequence的值减少1000。
单个修改的话执行下面:
-
- --注意:步长 改为 100 后记得改回为1
- alter sequence SEQ_CID increment by 100;
- SELECT SEQ_CID.nextval from dual;
- alter sequence SEQ_CID increment by 1;
批量修改脚本摘抄自:(89条消息) [oracle存储过程]统一修改数据库中的sequence当前值_oracle给所有序列的值加1000_罗小树的博客-CSDN博客
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。