ORACLE SEQUENCE(队列)用法2
??PS:当需要产生唯一ID的时候,MSSQL只需将ID设置为int类型,并且设置为自增长就能达到. 序列(Sequence)是一种可以被多个用户使用的用于产生一系列唯一数字的数据库对象。序列定义存储在数据字典中,通过提供唯一数值的顺序表来简化程序设计工作,可以使用序列自动产生主键的键值。当一个序列第一次被查询调用时,它将返回一个预定值。在随后的每次查询中,序列将产生一个按指定的增量增长的值。序列可以循环,或者是连续增加的,直到指定的最大值为止。 范例: CREATE SEQUENCE seqTest
INCREMENT BY 1 -- 每次加几个
START WITH 1 -- 从1开始计数
NOMAXvalue -- 不设置最大值
NOCYCLE -- 一直累加,不循环
CACHE 10; --设置缓存cache个序列,如果系统down掉了或者其它情况将会导致序列不连续,也可以设置为---------NOCACHE
案例: --队列测试
CREATE SEQUENCE seqTest
INCREMENT BY 1 -- 每次加几个
START WITH 1 -- 从1开始计数
NOMAXvalue -- 不设置最大值
NOCYCLE -- 一直累加,不循环
CACHE NOCACHE --设置缓存cache个序列,如果系统down掉了或者其它情况将会导致序列不连续,也可以设置为---------NOCACHE
--nextVal
select seqtest.nextVal from dual
select * from seqTest
select seqTest.currval from dual
--设置Shenqingdh队列
CREATE SEQUENCE seqShenqingdh
INCREMENT BY 1 -- 每次加几个
START WITH 100000001 -- 从100000001开始计数
NOMAXvalue -- 不设置最大值
NOCYCLE -- 一直累加,不循环
CACHE 10 --设置缓存cache个序列,如果系统down掉了或者其它情况将会导致序列不连续,也可以设置为---------NOCACHE
--查询 (第一次要先查nextVal 值,否则直接查currval 值会报错)
select seqShenqingdh.currval from dual
select seqShenqingdh.nextVal from dual
--得到Sequence值 --定义好sequence后,你就可以用currVal,nextVal取得值。 -- CurrVal:返回 sequence的当前值 -- NextVal:增加sequence的值,然后返回 增加后sequence值 --SELECT [定义Sequence名称].CurrVal FROM DUAL; --如得到上边创建Sequence值的语句为: select seqShenqingdh.nextVal from dual
NEXTVAL NEXTVAL C#后台使用案例: 获取nextVal的值给给实体entity.SHENQINGDH赋值. #region 获取Shenqingdh队列
var dv_seq = IBll.EntityHelper.Dal.Query(string.Format("select seqShenqingdh.nextVal from dual"));
if (dv_seq.Tables[0].Rows.Count > 0)
{
entity.SHENQINGDH = dv_seq.Tables[0].Rows[0]["nextVal"].ToString();
}
else
{
result = -1;
resultXml = GetErrorStr("获取Shenqingdh队列失败" + BAOJIANCH,result);
LogUtil.WriteLog("log","content:" + "失败." + "|msg:" + resultXml + "|原始请求数据:" + inXML,getMaxValueByXml("sType8"));
return result;
}
#endregion
扩展插入 -- Create table
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 );
--insert into 表名 (id,name) values ( [定义Sequence名称].Nextval,'sequence 插入测试');
INSERT INTO CXPTEST(ID,CONTENT) VALUES(seqShenqingdh.nextVal,'测试') select * from CXPTEST
ID CONTENT REMARKS 1 16100000000046 测试 参考文献: [1]http://www.cnblogs.com/hyzhou/archive/2012/04/12/2444158.html [2]http://bbs.csdn.net/topics/330168032 [3]http://www.52php.cn/article/p-eusjrimp-bhz.html (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |