Sequences创建
1)创建 sequence:
先要有 create sequence或者 create any sequence权限,执行以下命令就行:
create sequence sequence_name
increment by name_values1 —每次加几个
start with name_values1 —从 1开始计数
nomaxvalue —不设置最大值
nocycle —一直累加,不循环
cache 10;
一旦定义了 sequence_name,你就可以用 currval,nextval
currval=返回 sequence的当前值
nextval=增加 sequence的值,然后返回 sequence值
比如:
sequence_name.currval
sequence_name.nextval
可以使用 sequence的地方:
–不包含子查询、snapshot、view的 select语句
– insert语句的子查询中
– nsert语句的 values中
– update的 set中
可以看如下实例:
insert into table_name values
(empseq.nextval, ‘row1’, ‘row2’,7902, sysdate, 1200, null, 20);
select empseq.currval from dual;
但是要注意的是:
–第一次 nextval返回的是初始值;随后的 nextval会自动增加你定义的 increment by值,然后返
增加后的值。currval总是返回当前 sequence的值,但是在第一次 nextval初始化之后才能使用
currval,否则会出错。
一次 nextval会增加一次 sequence的值,所以如果你在同一个语句里面使用多个 nextval,其值就
是不一样的.
–如果指定 cache值,oracle就可以预先在内存里面放置一些 sequence,这样存取的快些。cache
里面的取完后,
oracle自动再取一组到 cache。使用 cache或许会跳号,比如数据库突然不正常 down掉(shutdown
abort),cache中的 sequence就会丢失.
所以可以在 create sequence的时候用 nocache防止这种情况。
2)alter sequence
你或者是该 sequence的 owner,或者有 alter any sequence权限才能改动 sequence.可以 alter除
start至以外的所有 sequence参数.如果想要改变 start值,必须 drop sequence再 re-create .
alter sequence的实例
alter sequence sequence_name
increment by 10
maxvalue 10000
cycle —到 10000后从头开始
nocache;
影响 sequence的初始化参数:
sequence_cache_entries =设置能同时被 cache的 sequence数目。
2、Sequences删除
drop sequence sequence_name;