【Oracle】序列(sequence)的简易使用方法

sequence在ORACLE中应用十分广泛,就是序列号的意思,会自动增加指定变数,如逐次增加1或者2或者其他.

1、创建序列 Create Sequence

你首先要有create sequence或者create any sequence 权限

create sequence cux_demo_sequence
minvalue 1
maxvalue 99999999999
start with 10000
increment by 1
nocycle
cache 20
order ;

注释:

    minvalue 1 --最小值

    maxvalue 99999999999 --最大值

    start with 10000 --起始数值

    increment by 1 --每次增加1

    nocycle --一直累加不循环

    cache 20 --缓存

    order ;

还有一些其他参数,比如:

    nomaxvalue --无最大值

    nocache --不设置缓存

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

2、使用序列

定义好sequence,你就可以用currvalnextval

    currval=返回 sequence的当前值

    nextval=增加sequence的值,然后返回 sequence 值

示例:

cux_demo_sequence.currval
cux_demo_sequence.nextval

可以使用sequence的地方:

    不包含子查询、snapshot、view的 select 语句

    insert语句的子查询中

    insert语句的values中

    update 的 set中

可以看如下例子:

insert into cux_demo_table values (cux_demo_sequence.nextval, 123 , 'ibad' , 'mark' ,'y');
select cux_demo_sequence.currval from dual;

注意:

第一次nextval返回的是初始值;随后的nextval会自动增加你定义的incrementby值,然后返回增加后的值。currval 总是返回当前sequence的值,但是在第一次nextval初始化之后才能使用currval,否则会出错。一次nextval会增加一次sequence的值,所以如果你在同一个语句里面使用多个nextval,其值就是不一样的。

3、修改序列 alter sequence

你或者是该sequence的owner,或者有alter any sequence 权限才能改动sequence. 可以alter除start至以外的所有sequence参数.如果想要改变start值,必须 drop sequence 再 重新创建sequence .

alter sequence
alter sequence cux_demo_sequence
increment by 10
maxvalue 10000
cycle -- 到10000后从头开始
nocache ;

影响sequence的初始化参数:

    sequence_cache_entries =设置能同时被cache的sequence数目。

4、删除序列 drop sequence

可以很简单的drop sequence

drop sequence cux_demo_sequence;


赞(52) 打赏
未经允许不得转载:优客志 » 数据库
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏