ORACLEPLSQL中序列(sequence)的简易使⽤⽅法介绍
原⽂sequence在ORACLE中应⽤⼗分⼴泛,就是序列号的意思,会⾃动增加指定变数,如逐次增加1或者2或者其他.
1.创建序列 Create Sequence
sql中update什么意思你⾸先要有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,你就可以⽤CURRVAL,NEXTVAL
CURRVAL=返回 SEQUENCE的当前值
NEXTVAL=增加SEQUENCE的值,然后返回 SEQUENCE 值
EXAMPLE:
CUX_DEMO_SEQUENCE.CURRVAL
CUX_DEMO_SEQUENCE.NEXTVAL
可以使⽤SEQUENCE的地⽅:
- 不包含⼦查询、snapshot、VIEW的 SELECT 语句
- INSERT语句的⼦查询中
- NSERT语句的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;
11g中对PL/SQL访问sequence的⼀个改进
5.在pl/sql 代码中访问⼀个sequence
在Oracle 11g之前,熟悉pl/sql编程的puber们都知道,当在pl/sql 代码中访问⼀个sequence的时候,⼀般的做法是,⽐如:
DECLARE v_n number;
BEGIN
SELECT Seq.Nextval INTO v_n FROM Dual;
....
END;
所以⼤家都觉得很烦琐,⽽且这么写有⼀定的性能上的开销,但是没办法,那么好了,到了11g,这个问题Oracle开发者为你排忧了。
在11g中,重新修改了访问⽅法,不仅仅提⾼了运⾏效率⽽且在pl/sql中的调⽤⽅法也变的⾮常简单,在11g中,你可以简单的这样处理:DECLARE v_n NUMBER:=Seq.Nextval;
BEGIN
....
END;
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论