oracle建队列,ORACLE SEQUENCE(队列)用法2

PS:当需要产生唯一ID的时候,MSsql只需将ID设置为int类型,并且设置为自增长就能达到.

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

序列(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

16100000000044

NEXTVAL

16100000000045

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 测试

2 16100000000047 测试

3 16100000000048 测试

参考文献:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值