ITPub博客

首页 > 数据库 > Oracle > Oracle序列

Oracle序列

原创 Oracle 作者:llnnmc 时间:2017-07-11 11:10:56 0 删除 编辑


一、序列的创建


create sequence [schema.]sequencename

[increment by number]

[start with number]

[maxvalue number | nomaxvalue]

[minvalue number | nominvalue]

[cycle | nocycle]

[cache number | nocache]

[order | noorder]


increment by:递增数,默认为1。

start with:起始值,默认为1。

maxvalue:最大值,默认无最大值。

minvalue:最小值,默认无最小值。

cycle/nocycle:序列到达最大或最小值后的行为,默认抛出错误,如果为cycle,则会返回起点并重复(注意返回的起点不是start with设定的值,而是从1开始)。

cache/nocache:默认cache为20。

order/noorder:用于集群环境,让各个实例协同产生序列。


二、序列的产生


利用伪列产生序列

nextval:针对全局产生的下一个值,每个会话必须先有nextval,才能有currval。

select s.nextval from dual;


currval:发送给当前会话的上一个值,并不是序列发出的上一个值,这样每个会话才能调用自己的currval值,因为这是它自己上次发出的。

select s.currval from dual;


如数据库被重启,断电等,缓存中的序列会丢失,导致序列出现间隔。

序列是全局共享的,不同的会话也将导致可能产生序列间隔。

序列产生后不能回滚。


三、序列的查询


查看用户的序列对象信息

col sequence_name for a20

select  * from user_sequences;


SEQUENCE_NAME         MIN_VALUE  MAX_VALUE INCREMENT_BY CYCLE_FLAG ORDER_FLAG CACHE_SIZE LAST_NUMBER

-------------------- ---------- ---------- ------------ ---------- ---------- ---------- -----------

S                             1       1E28            1 N          N                  20          21


last_number就是下一个要创建的值,不包括缓存中已创建的序列。


四、序列的修改


使用alter sequence命令修改序列

alter sequence s increment by 20;


不能修改起点start with,修改不影响已经存在的序列,只影响后续序列。


默认为20的cache数量可能不够而影响性能,可以考虑增大

alter sequence s cache 100;


五、序列的删除


使用drop sequence命令删除序列

drop sequence s;


如果序列号要重置起点,只能删除重建。


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/28974745/viewspace-2141892/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: SQL函数
请登录后发表评论 登录
全部评论
刘鲁宁的个人博客。

注册时间:2016-12-29

  • 博文量
    113
  • 访问量
    287700