序列:
在Oracle开发中,序列最常见的功能是为数据表提供自增列值,序列是一种数据库对象,用来自动产生一组唯一的序号,多个用户可以共同使用序列中的序号,一般将序列应用于表的主键列
对于Oracle数据库来说,自动生成序号都是必不可少的需求之一
语法:
CREATE SEQUENCES 序列名称
[MAXVALUE 最大值 | NOMAXVALUE]
[MINVALUE 最小值 | NOMINVALUE]
[INCREMENT BY 步长] [START WITH 开始值]
[CYCLE | NOCYCLE]
[CACHE 缓存个数 | NOCACHE]
序列属于数据库对象的创建过程,属于DDL的分类范畴,对于序列而言,创建之后一定会在数据字典之中保存
范例:查询user_sequences数据字典
序列已经创建成功,如果要想使用序列则可以使用如下两个伪列
nextval:取得序列下一个内容,每一次调用序列的值都会增长
currval:表示取得序列的当前内容,每一次调用序列不会增长
- 但是要注意的是:
- - 第一次NEXTVAL返回的是初始值;随后的NEXTVAL会自动增加你定义的INCREMENT BY值,
- 然后返回增加后的值。CURRVAL 总是返回当前sequence的值,但是在第一次NEXTVAL
- 初始化之后才能使用CURRVAL,否则会出错。一次NEXTVAL会增加一次sequence的值,
- 所以如果你在同一个语句里面使用多个NEXTVAL,其值就是不一样的。明白?
- - 如果指定CACHE值,oracle就可以预先在内存里面放置一些sequence,这样存取的快
- 些。
- cache里面的取完后,oracle自动再取一组到cache。 使用cache或许会跳号
- 2、 Alter sequence
- 你或者是该sequence的owner,或者有ALTER ANY sequence权限才能改动sequence。 可
- 以alter除start值之外的所有sequence参数。如果想要改变start值,必须drop sequence
- 再re-create。例子:
- ALTER sequence emp_sequence
- INCREMENT BY 10
- MAXVALUE 10000
- CYCLE -- 到10000后从头开始
- NOCACHE;
- 影响sequence的初始化参数:
- sequence_CACHE_ENTRIES =
- 设置能同时被cache的sequence数目。
- 可以很简单的Drop sequence
- DROP sequence order_seq;