前言

前面因为项目数据导数据,我们介绍过《Oracle通过ODBC连接SQL Server数据库》,在实际导入过程中新的数据表结构里面存在不少ID的列,所以就用到了Oracle的序列,这一章我们就来介绍一下Oracle的序列(Oracle Sequence)。

Sequence介绍

Sequence是数据库系统按照一定的规则自动增加的数字序列,主要用于生成数据库数据记录。这个序列一般作为代理主键(因为不会重复)。

Sequence是数据中一个特殊存放等差数列的表,该表受数据库系统控制,任何时候数据库系统都可以根据当前记录数大小加上步长来获取到该表下一条记录应该是多少,这个表没有实际意义,常常用来做主键用。Sequence是数据库系统的特性,有的数据库有Sequence,有的没有。比如Oracle、DB2、PostgreSQL数据库有Sequence,MySQL、SQL Server、Sybase等数据库则没有Sequence。

Sequence创建

序列的创建语法:create sequence

注:在创建序列之前用户需要有CREATE SEQUENCE 或者CREATE ANY SEQUENCE权限。

创建序列代码

-- Create sequence 
create sequence SEQ_INFO_CHG              --Sequence实例名
minvalue 1                                --最小值,可以设置为0
maxvalue 2147483647                       --最大值
start with 1                              --从1开始计数
increment by 1                            --每次加几个
cache 20;                                 --设置缓存cache个序列,如果系统down掉了或者其它情况将会导致序列不连续,也可以设置为---------NOCACHE

还有一种写法

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

Sequence使用

通过上面的创建好Sequence后就可以通过currVal与nextVal进行使用。

currVal:返回 sequence的当前值

select SEQ_INFO_CHG.currVal from dual;

nextVal:增加sequence的值,然后返回增加后sequence值

select SEQ_INFO_CHG.nextVal from dual;

在Sql语句中可以使用sequence的地方:

  1. 不包含子查询、snapshot、VIEW的 SELECT 语句
  2. INSERT语句的子查询中
  3. INSERT语句的values中
  4. UPDATE 的 SET中

使用Currval和nextVal的注意事项

  • CURRVAL总是返回当前SEQUENCE的值,但是在第一次NEXTVAL初始化之后才能使用CURRVAL,否则会出错。
  • 第一次NEXTVAL返回的是初始值;随后的NEXTVAL会自动增加你定义的INCREMENT BY值,然后返回增加后的值。

Sequence修改

拥有ALTER ANY SEQUENCE 权限才能改动sequence. 可以alter除start至以外的所有sequence参数.如果想要改变start值,必须drop sequence再 re-create。

修改最大值

alter sequence SEQ_INFO_CHG maxvalue 9999999;

修改多个值

alter sequence SEQ_INFO_CHG 
increment by 10
maxvalue 10000
cycle  —-到10000后从头开始
nocache;

Sequence删除

序列的删除语法:drop sequence

drop sequence SEQ_INFO_CHG;

-END-

Vaccae的往期经典


OpenCV

《C++ OpenCV案例实战---卡号获取》

《C++ OpenCV案例实战---卡片截取(附代码)》

《C++ OpenCV透视变换---切换手机正面图片》

《C++ OpenCV实战---获取数量》

《C++ OpenCV实战---利用颜色分割获取数量》


Android

《Android利用SurfaceView结合科大讯飞修改语音实别UI》

《Android关于语音识别的功能实现分析(一)---结构化思维》

《Android关于语音识别的功能实现分析(二)---语义解析》

《Android根据类生成签名字符串》

《Android碎片化布局fragment的实战应用》

《Android中RecyclerView嵌套RecyclerView》

《Android里用AsyncTask后的接口回调》


.Net C#

《C#自定义特性(Attribute)讲解与实际应用》

《C#根据类生成签名字符串(附DEMO下载地址)》

《C++创建动态库C#调用》

《C#与三菱PLC(型号FX2N)串口通讯类》


数据库及其它

《Oracel存储过程写报表实战》

《Delphi轮播视频和图片程序(用于双屏显示程序)》

《SQL随机增加销售数据的脚本编写(附脚本下载地址)》

《Oracle通过ODBC连接SQL Server数据库》