ORACLE SEQUENCE

来源:互联网 发布:故事软件下载 编辑:程序博客网 时间:2024/05/22 19:56

sequence就是序列号,每次取的时候它会自动增加。
1、Create Sequence

CREATE SEQUENCE sequence_test INCREMENT BY 1 -- 每次加的个数START WITH 1   -- 序列开始的值 NOMAXVALUE     -- 表示不设置最大值 NOCYCLE        -- 表示一直累加,不循环 CACHE 10; 


创建完sequence后,你就可以用CURRVAL,NEXTVAL来获取当前值和下一个值
第一次NEXTVAL返回的是初始值;随后的NEXTVAL会自动增加你定义的INCREMENT BY值,然后返回增加后的值
CURRVAL 总是返回当前SEQUENCE的值,但是在第一次NEXTVAL初始化之后才能使用CURRVAL,否则会出错
一次NEXTVAL会增加一次SEQUENCE的值,所以如果你在同一个语句里面使用多个NEXTVAL,其值就是不一样的

sequence_test.CURRVAL --返回 sequence的当前值sequence_test.NEXTVAL --增加sequence的值,然后返回 sequence 值 


可以使用sequence的地方:
- 不包含子查询、snapshot、VIEW的 SELECT 语句
- INSERT语句的子查询中
- INSERT语句的VALUES中
- UPDATE 的 SET中

例子:

INSERT INTO student VALUES (sequence_test.nextval, 'zhangsan', '21',0371); SELECT sequence_test.currval FROM DUAL; 


- 如果指定CACHE值,ORACLE会预先在内存里面生成一些sequence,这样存取的速度会更快。
cache里面的取完后,oracle自动再取一组到cache。
使用cache或许会跳号, 比如数据库突然不正常down掉(shutdown abort),cache中的sequence就会丢失。
所以可以在create sequence的时候用nocache防止这种情况。

2、修改sequence
可以alter除start至以外的所有sequence参数。如果想要改变start值,必须 drop sequence 再 re-create。
例子:

ALTER SEQUENCE sequence_test INCREMENT BY 20 MAXVALUE 30000 CYCLE -- 到30000后从头开始 NOCACHE ; 


影响Sequence的初始化参数:
SEQUENCE_CACHE_ENTRIES =设置能同时被cache的sequence数目。

删除SEQUENCE:

DROP SEQUENCE sequence_test; 
0 0
原创粉丝点击