ORACLE SEQUENCE(队列)用法2

前端之家收集整理的这篇文章主要介绍了ORACLE SEQUENCE(队列)用法2前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

PS:当需要产生唯一ID的时候,MSsql只需将ID设置为int类型,并且设置为自增长就能达到.
oracle中需要用序列+触发器 才可以达到 MSsql中的只增长效果.(俩者还是有区别的.oracle中需要用序列类似于建了一张临时表专门用来管理序列,可以为多张表诸如A,B,C,D,E等多张表的ID都可以用这个公共的序列来做他们的主键,并且表与表的主键也不会重复.)

序列(Sequence)是一种可以被多个用户使用的用于产生一系列唯一数字的数据库对象。序列定义存储在数据字典中,通过提供唯一数值的顺序表来简化程序设计工作,可以使用序列自动产生主键的键值。当一个序列第一次被查询调用时,它将返回一个预定值。在随后的每次查询中,序列将产生一个按指定的增量增长的值。序列可以循环,或者是连续增加的,直到指定的最大值为止。

范例:

  1. CREATE SEQUENCE seqTest
  2. INCREMENT BY 1 -- 每次加几个
  3. START WITH 1 -- 1开始计数
  4. NOMAXvalue -- 不设置最大值
  5. NOCYCLE -- 一直累加,不循环
  6. CACHE 10; --设置缓存cache个序列,如果系统down掉了或者其它情况将会导致序列不连续,也可以设置为---------NOCACHE

案例:

  1. --队列测试
  2. CREATE SEQUENCE seqTest
  3. INCREMENT BY 1 -- 每次加几个
  4. START WITH 1 -- 1开始计数
  5. NOMAXvalue -- 不设置最大值
  6. NOCYCLE -- 一直累加,不循环
  7. CACHE NOCACHE --设置缓存cache个序列,如果系统down掉了或者其它情况将会导致序列不连续,也可以设置为---------NOCACHE
  8.  
  9. --nextVal
  10. select seqtest.nextVal from dual
  11. select * from seqTest
  12. select seqTest.currval from dual
  13.  
  14.  
  15. --设置Shenqingdh队列
  16. CREATE SEQUENCE seqShenqingdh
  17. INCREMENT BY 1 -- 每次加几个
  18. START WITH 100000001 -- 100000001开始计数
  19. NOMAXvalue -- 不设置最大值
  20. NOCYCLE -- 一直累加,不循环
  21. CACHE 10 --设置缓存cache个序列,如果系统down掉了或者其它情况将会导致序列不连续,也可以设置为---------NOCACHE
  22.  
  23. --查询 (第一次要先查nextVal 值,否则直接查currval 值会报错)
  24. select seqShenqingdh.currval from dual
  25. select seqShenqingdh.nextVal from dual
  1. --得到Sequence --定义好sequence后,你就可以用currValnextVal取得值。 -- CurrVal:返回 sequence的当前值 -- NextVal增加sequence的值,然后返回 增加sequence --SELECT [定义Sequence名称].CurrVal FROM DUAL; --如得到上边创建Sequence值的语句为: select seqShenqingdh.nextVal from dual

NEXTVAL
16100000000044


NEXTVAL
16100000000045

C#后台使用案例:

获取nextVal的值给给实体entity.SHENQINGDH赋值.

  1. #region 获取Shenqingdh队列
  2. var dv_seq = IBll.EntityHelper.Dal.Query(string.Format("select seqShenqingdh.nextVal from dual"));
  3. if (dv_seq.Tables[0].Rows.Count > 0)
  4. {
  5. entity.SHENQINGDH = dv_seq.Tables[0].Rows[0]["nextVal"].ToString();
  6. }
  7. else
  8. {
  9. result = -1;
  10. resultXml = GetErrorStr("获取Shenqingdh队列失败" + BAOJIANCH,result);
  11. LogUtil.WriteLog("log","content:" + "失败." + "|msg:" + resultXml + "|原始请求数据:" + inXML,getMaxValueByXml("sType8"));
  12. return result;
  13. }
  14. #endregion

扩展插入

  1. -- Create table
  2. create table CXPTEST ( id VARCHAR2(50),content VARCHAR2(50),remarks VARCHAR2(50) ) tablespace TS_FYBJ pctfree 10 initrans 1 maxtrans 255 storage ( initial 64K next 8K minextents 1 maxextents unlimited );
  1. --insert into 表名 (id,name) values ( [定义Sequence名称].Nextval,'sequence 插入测试');
  2. INSERT INTO CXPTEST(ID,CONTENT) VALUES(seqShenqingdh.nextVal,'测试') select * from CXPTEST

  1. ID CONTENT REMARKS

1 16100000000046 测试
2 16100000000047 测试
3 16100000000048 测试

参考文献:

[1]http://www.cnblogs.com/hyzhou/archive/2012/04/12/2444158.html

[2]http://bbs.csdn.net/topics/330168032

[3]http://www.jb51.cc/article/p-eusjrimp-bhz.html

猜你在找的Oracle相关文章