当前位置: 首页 > 图文教程 > 数据库 > Oracle > 掌握Oracle数据库中sequence的用法

Oracle
Oracle Tuning技巧总结
如何选择Oracle优化器
如何使用Logmnr方法分析数据库日志
保持Oracle数据优良性能的若干诀窍
Oracle 10g R2ORA-3136 错误解决
Oracle中行迁移和行链接的清除及检测
不要忽视Oracle 10g STATSPACK
ORACLE性能调整--统计信息的迁移
用Oracle TimesTen加速Oracle数据库
在Oracle 10g中如何获得索引建议
Oracle中的SQL语句性能调整原则
Oracle Spatial新驱动的添加记录实例
在Linux系统下如何优化Oracle具体步骤
Oracle数据库删除两表中相同数据的方法
Oracle 容灾复制解决方案分析Shar Plex
oltp系统,数据块大小用4k还是8k好?
数据库中如何使用SQL查询连续号码段
在数据字典中直接修改表列的名称和顺序
讲解Oracle里抽取随机数的多种方法
使用一条SQL语句删除表中重复记录

掌握Oracle数据库中sequence的用法


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-30   浏览: 41 ::
收藏到网摘: n/a

在Oracle数据库中,sequence等同于序列号,每次取的时候sequence会自动增加,一般会作用于需要按序列号排序的地方。

1、Create Sequence

(注释:你需要有CREATE SEQUENCE或CREATE ANY SEQUENCE权限)

CREATE SEQUENCE emp_sequence

INCREMENT BY 1 -- 每次加几个

START WITH 1 -- 从1开始计数

NOMAXVALUE -- 不设置最大值

NOCYCLE -- 一直累加,不循环

CACHE 10;


只要定义了emp_sequence,你就可以用使CURRVAL,NEXTVAL

CURRVAL=返回 sequence的当前值

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

例如:


emp_sequence.CURRVAL 
emp_sequence.NEXTVAL
 
可以使用sequence的地方:

· 不包含子查询、snapshot、VIEW的 SELECT 语句

·INSERT语句的子查询中

·NSERT语句的VALUES中

·UPDATE 的 SET中


可以看如下例子:


INSERT INTO emp VALUES  
(empseq.nextval, 'LEWIS', 'CLERK',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 emp_sequence 
INCREMENT BY 10 
MAXVALUE 10000 
CYCLE     -- 到10000后从头开始 
NOCACHE ;
 

可以影响Sequence的初始化参数:

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


简单的Drop Sequence

DROP SEQUENCE order_seq;