Oracle 序列使用整理

当前使用的oracle版本如下:

 创建序列:

CREATE SEQUENCE seq_test 
INCREMENT BY 1    序列每次增加的值,负数表示递减,缺省值为1
START WITH 1      序列的初始值,缺省值为1
NOMAXVALUE        序列可生成的最大值,缺省值为nomaxvalue
NOCYCLE           定义当序列达到最大/小值后是否循环,缺省值为不循环;nocycle:不循环;cycle:循 
                  环
NOCACHE;          nocache表示不设置缓存;使用缓存可以提高序列的性能,但数据库出错时会造成数据丢失使序列不连续

查看当前用户下的所有序列:
  select * from user_sequences;

查看所有用户下的所有序列:
  select * from all_sequences;

  1:创建成功后,使用select seq_test.nextval from dual;  查询序列下一个值

  2:使用select * from dba_sequences  where sequence_name = 'SEQ_TEST';  查询序列是否创建成功

     Tips:oracle序列名都是大写,新建时可以用小写字母命名,但系统默认大写,查询时要全用大写字母,如下图所示,用英文大写可以查出序列值,使用小写字母则查不到

使用序列为数据库主键时,由于人为手动操作数据表,导致主键不再连续。程序中使用序列生成的主键值发生冲突时,可以通过下面语句更改序列值,如下图通过查询获得新的序列值:

ALTER SEQUENCE SEQ_TEST 
INCREMENT BY 10   修改的数值,在原来数值上相加

最后,删除不要的序列,使用 DROP SEQUENCE SEQ_TEST ,通过查询确认删除成功

注意:当没有设置最大值时,且没有设置循环时,当再次执行下一个序列时就会报错:

[SQL]SELECT SEQ_TEST.NEXTVAL FROM DUAL
[Err] ORA-08004: sequence SEQ_TEST.NEXTVAL exceeds MAXVALUE and cannot be instantiated 超过MAXVALUE,无法实例化

1:使用:ALTER SEQUENCE SEQ_TEST NOMAXVALUE INCREMENT BY 1 

查询后发现最大值进行了更改:

2:设置序列当序列达到最大/小值后循环:

alter sequence SEQ_TEST cycle  ;

总结:创建序列时要么设置NOMAXVALUE (序列可生成的最大值),要么设置序列达到设置值之后可以循环CYCLE,否则等序列值接近最大值,就会如上述报错

  

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值