1.创建序列
create sequence seq_name
INCREMENT BY 1 -- 每次加几个
START WITH 1 -- 从1开始计数
NOMAXVALUE -- 不设置最大值 MAXVALUE 最大值 例如:MAXVALUE 99999
NOCYCLE -- 一直累加,不循环 CYCLE 从头开始
CACHE 10; -- 预先在内存里面放置一些sequence,存取的较快;cache里面的取完后,oracle自动再取一组到cache。使用cache或许会跳号,比如数据库突然不正常down掉(shutdown abort),cache中的sequence就会丢失. 所以可以在create sequence的时候用nocache防止这种情况。
创建序列:
create sequence seq_name increment by 1 start with 1 minvalue 1 maxvalue 9999 nocache
2.查看效果
select (lpad(seq_name.nextval, 4, '0')) seq from dual
3.序列重置
1. // 假设得到结果 5656
select seq_name.nextval from dual;
2. // 设置增加大小
alter sequence seq_name increment by -5655;
3. // 再查一遍,走一下,重置为1了
select seq_name.nextval from dual;
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;
4.删除序列
drop sequence seq_name;