ORACLE SEQUENCE

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; 

你可能感兴趣的:(ORACLE SEQUENCE)