您的位置:首页 > 数据库 > Oracle

EF中创建、使用Oracle数据库的Sequence(序列)功能

2016-08-11 11:34 369 查看
** 背景 **


项目中订单号原来的生成规则由日期加随机数组成,后期需求决定将订单号生成规则更改为生成日期加当天当前订单数。


每天的订单数都是从0开始的,每生成一个订单,订单数就应该加1.订单数应该是持久的,写在Session中或者Memcached缓存中,当网站重启或者服务器重启时都会面临丢失的问题,所以只能存在数据库中。幸好Oracle数据库提供了Sequence(序列)功能,我们来看下Sequence(序列)的概述及其用法。

** 概述 **


Oracle提供了Sequence对象,由系统提供自增长的序列号,通常用于生成数据库的自增长主键或序号的地方。

Sequence是数据库系统按照一定规则自动增加的数字序列。这个序列一般作为代理主键(因为不会重复),没有其他任何意义。1


** 基本用法 **


CREATE SEQUENCE emp_sequence -序列名

INCREMENT BY 1 — 每次递增数值

START WITH 1 — 从1开始计数

MAXVALUE 999999 --最大值 || NOMAXVALUE — 不设置最大值

CYCLE - 循环,达到最大值从最小值开始||NOCYCLE — 一直累加,不循环

CACHE 10;-缓存数值


下面我们就来看EF的DbContext具体使用:

** 1. 判断是否存在名为
ODORDER
的序列 **

int count = context.Database.SqlQuery<int>("SELECT count(*) FROM All_Sequences where Sequence_name='ODORDER'").FirstOrDefault()

如数据库中存在该序列,则返回的数值应大于0。

** 2. 每天的订单数都应该是从新开始的,所以简单做法如果存在
ODORDER
该序列,我们先删除. **

context.Database.ExecuteSqlCommand("DROP SEQUENCE ODORDER")

** 3. 创建名为
ODORDER
的序列 **

context.Database.ExecuteSqlCommand("CREATE SEQUENCE ODORDER INCREMENT BY 1 START WITH 100000 MAXVALUE 900000 MINVALUE 100000 CYCLE CACHE 20 ");

** 4. 获取最新订单数 **

context.Database.SqlQuery<int>("select ODORDER.nextval from dual").FirstOrDefault()

原创文章,如有转摘请注明来源!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: