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

Oracle
Oracle 数据库自动存储管理-安装配置
ORACLE 10g 安装教程[图文]
Oracle 的入门心得 强烈推荐
Windows Oracle常见服务介绍
oracle 发送邮件 实现方法
在Spring中用select last_insert_id()时遇到问题
oracle sqlplus 常用命令大全
oracle 触发器 学习笔记
Oracle 随机数
ProC 连接Oracle代码
MS Server和Oracle中对NULL处理的一些细节差异
oracle10g 数据备份与导入
oracle 安装与SQLPLUS简单用法
Oracle SID存在解決方法
Oracle 低权限数据库账户得到 OS 访问权限 提权利用
oracle 动态AdvStringGrid完美示例 (AdvStringGrid使用技巧/Cells)
oracle 集合
oracle 字符串转成行
Oracle10g 安装方法
oracle 日期函数集合(集中版本)

掌握Oracle数据库中sequence的用法


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-30   浏览: 47 ::
收藏到网摘: 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;