Oracle创建自增字段方法-ORACLESEQUENCE的简单介绍.doc_第1页
Oracle创建自增字段方法-ORACLESEQUENCE的简单介绍.doc_第2页
Oracle创建自增字段方法-ORACLESEQUENCE的简单介绍.doc_第3页
Oracle创建自增字段方法-ORACLESEQUENCE的简单介绍.doc_第4页
Oracle创建自增字段方法-ORACLESEQUENCE的简单介绍.doc_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Oracle创建自增字段方法-ORACLE SEQUENCE的简单介绍 先假设有这么一个表:create table S_Depart ( DepartIdINTnot null, DepartName NVARCHAR2(40)not null, DepartOrderINTdefault 0,constraint PK_S_DEPART primary key (DepartId);在oracle中sequence就是所谓的序列号,每次取的时候它会自动增加,一般用在需要按序列号排序的地方。 1、Create Sequence 你首先要有CREATE SEQUENCE或者CREATE ANY SEQUENCE权限, CREATE SEQUENCE emp_sequence INCREMENT BY 1 - 每次加几个 START WITH 1 - 从1开始计数 NOMAXvalue - 不设置最大值 NOCYCLE - 一直累加,不循环 CACHE 10; -设置缓存cache个序列,如果系统down掉了或者其它情况将会导致序列不连续,也可以设置为-NOCACHE针对S_Depart创建的sequence如下:create sequence S_S_DEPARTminvalue 1maxvalue 999999999999999999999999999start with 1increment by 1nocache;一旦定义了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 S_Depart(departId,Departname,Departorder)values(S_S_Depart.Nextval,12345,1);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; 一个简单的例子:create sequence SEQ_IDminvalue 1maxvalue 99999999start with 1increment by 1nocacheorder;建解发器代码为:create or replace trigger tri_test_idbefore insert on S_Depart -S_Depart 是表名for each rowdeclare nextid number;beginIF :new.DepartId IS NULLor :new.DepartId=0 THEN -DepartId是列名select SEQ_ID.nextval

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论