您的位置:首页 > 数据库 > Oracle

ORACLE 序列sequence小结

2016-04-09 10:10 501 查看
创建序列语法:  需要获取相应的权限

create sequence NAME 

[ { INCREMENT BY | START WITH } integer          ----初始值和递增间隔

| { MAXVALUE integer | NOMAXVALUE }               ----上界或无上界

| { MINVALUE integer | NOMINVALUE }                 ----下界或无下界

| { CYCLE | NOCYCLE }                                       ----是否循环

| { CACHE integer | NOCACHE }                            ----是否缓存

| {ORDER | NOORDER}                                       ----是否排序



CACHE 代表是否在内存中预分配相应大小的缓存,以方便快速访问。注意 CACHE 缓存的值个数<循环体值个数 。

若系统死机或突然断电容易出现跳号现象,在创建计数器后,在内存缓存X个值,当系统崩溃后,内存中的值丢失,然而文件中任然记录了上次已经读取的值,从而造成跳号。

CYCLE 指定循环序列,超过上界或下界后,从下界或上界重新开始。

INCREMENT by 指定递增大小,可以为正或为负。

ORDER 保证序列号是因为有请求才生成的,并且按照请求的顺序生成。

使用序列的方式:

NEXTVAL 获取下一个序列值。

CURRVAL 获取最后一次NEXTVAL的序列值。

注意:初始化时,即第一次获取序列值时要使用NEXTVAL获取第一个序列值。否则会报错。

序列修改和删除语法:

ALTER SEQUENCE NAME

{ INCREMENT BY integer

| { MAXVALUE integer | NOMAXVALUE }            

| { MINVALUE integer | NOMINVALUE }                

| { CYCLE | NOCYCLE }                                   

| { CACHE integer | NOCACHE }                       

| {ORDER | NOORDER}

} ;

DROP SEQUENCE NAME;

若要使序列start with 的值不同,则只能先删除后创建。

当使用NEXTVAL初始化时,若修改increment by, 则会产生跳号。如图:初始化应该为100,但是结果为130。


执行修改语句前:


执行修改语句后:


应用场景:

可以用在select、update、insert中。

variable seqid number

insert into t3 values(seq_tl.nextval) returning ncol into :seqid;  

select * from t3 where ncol=:seqid;

返回插入行的序列值并显示插入信息。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据库 oracle