`
zq35537032
  • 浏览: 1991 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

Oracle中的序列(sequence)

阅读更多
今天研发人员问起oracle中怎么设置自增,记得oracle中没有自增类型的字段的,所以通常情况下我们需要定义一个sequence来作为自动增长类型字段的数据。

于是记录了一些关于oracle sequence的资料,已备查用!

Oracle中的序列(sequence)

1: 如何定义一个序列

仅向前的数字变量(和SQL中的自动编号有点像 identity(1,2)  )
        格式:
IXDBA.NET技术社区
        create sequence <序列名称>
         start with <起始数>
         increment by <增长量>
         [maxvalue  值]
         [minvalue  值]
         [cycle 当到达最大值的时候,将继续从头开始]
         [Nocycle  -- 一直累加,不循环]  
      [Cache ]

注意:
  第一次NEXTVAL返回的是初始值;随后的NEXTVAL会自动增加你定义的INCREMENT BY值,然后返回增加后的值。CURRVAL 总是返回当前SEQUENCE的值,但是在第一次NEXTVAL初始化之后才能使用CURRVAL,否则会出错。一次NEXTVAL会增加一次SEQUENCE的值。  
  如果指定CACHE值,ORACLE就可以预先在内存里面放置一些sequence,这样存取的快些。cache里面的取完后,oracle自动再取一组到cache。 使用cache或许会跳号, 比如数据库突然不正常down掉(shutdown abort),cache中的sequence就会丢失. 所以可以在create sequence的时候用nocache防止这种情况。

example:    
        create sequence mySeq
        start with 1
        increment by 2
        maxvalue 40
        minvalue 1
        cycle

2:怎么去取序列数据:

currval--->curenvalue
  nextVal-->NextVlaue
   example:
    select mySeq.nextVal from dual
  
注意一点:currval只有当nextVal执行一次以后才可以用.

在创建表的时候,可以使用序列.

具体例子:
   create table 公司基本信息表
   (
   ComPID int,
   CompName varchar2(20)
   )
  
insert into 公司基本信息表 values(mySeq.nextVal,'AA')
 
3:如何修改序列

  修改前提是sequence 的owner,或者有ALTER ANY SEQUENCE 权限才能改动sequence. 可以alter除start至以外的所有sequence参数.如果想要改变start值,必须 drop sequence 再 re-create .
  
  Alter sequence 的例子:
  ALTER SEQUENCE emp_sequence
  INCREMENT BY 10
  MAXvalue 10000
  CYCLE   -- 到10000后从头开始
  NOCACHE
  
  影响Sequence的初始化参数:
SEQUENCE_CACHE_ENTRIES =设置能同时被cache的sequence数目。

也可以这样
alter sequence mySeq maxvalue 500
注意:不能改start with,其他随便改(设置minvalue值的时候不能大于当前值)

4:如何查看删除某个表空间所有序列

查看:
   select * from user_sequences
如何删除:
   drop sequence 序列名称

5:sequence属于什么对象

sequence不属于某个表,也不属于某个字段,sequence仅仅属于某个用户。

其实在创建了sequence后,每个表都可以使用这个sequence,但是这样会引起应用的很多麻烦,因此,建议每个表都使用一个sequence。
分享到:
评论

相关推荐

    Oracle sequence 重置(失效恢复)

    在Oracle数据库移植过程中,sequence可能失效,本资源可使失效的sequence重新恢复作用

    oracle 主键自增 sequence

    然后从sequence中查就行 胡萝卜须 23:22:02 不用关联 緣,仯芣妸訁 23:23:57 嗯 我再找找看 胡萝卜须 23:24:16 insert的时候用sequence 胡萝卜须 23:25:23 sequence.Nextval 緣,仯芣妸訁 23:26:05 比如我insert ...

    分享ORACLE SEQUENCE跳号总结

    在ORACLE数据库中,序列(SEQUENCE)是使用非常频繁的一个数据库对象,但是有时候会遇到序列(SEQUECNE)跳号(skip sequence numbers)的情形,那么在哪些情形下会遇到跳号呢?  事务回滚引起的跳号  不管序列有...

    浅谈MyBatis-Plus学习之Oracle的主键Sequence设置的方法

    主要介绍了浅谈MyBatis-Plus学习之Oracle的主键Sequence设置的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    通过实例了解Oracle序列Sequence使用方法

    序列(Sequence)是用来生成连续的整数数据的对象。序列常常用来作为主键中增长列, 序列中的可以升序生成,也可以降序生成。创建序列的语法是: 语法结构:创建序列 CREATE SEQUENCE sequence_name [START WITH ...

    oracle 存储过程使用 sequence

    NULL 博文链接:https://snowelf.iteye.com/blog/575555

    MyBatis Oracle 自增序列的实现方法

    给大家分享MyBatis Oracle 自增序列的实现方法及mybatis配置oracle的主键自增长的方法,非常不错具有一定的参考借鉴价值,感兴趣的朋友一起看看吧

    生成oracle数据库中的所有sequence的语句

    可以根据oracle数据库中存在的sequence,生成建立语句

    Oracle创建自增字段sequence

    Oracle中没有sqlserver中那么方便的自增序列,如果想要达到sqlserver中那种效果,也不是很麻烦,需要创建一个自增序列SEQUENCE,然后建一个触发器即可。  CREATE SEQUENCE emp_sequence  INCREMENT BY 1 — ...

    Oracle 创建和使用序列

    --创建序列 create sequence seq_user start with 1 increment by 1 nomaxvalue cache 10; --使用序列 insert into user_table(user_id,user_name,user_pwd) vlaues(seq_user.nextval,'tcy','tcy'); --修改...

    oracle 重置序列从指定数字开始的方法详解

    重置oracle序列从指定数字开始 代码如下: declare n number(10); v_startnum number(10):=10000001;–从多少开始 v_step number(10):=1;–步进 tsql varchar2(200); v_seqname varchar2(200):=’MIP_JF_SEQUENCE’;...

    sequence等同于序列号

    在Oracle数据库中,sequence等同于序列号,每次取的时候sequence会自动增加,一般会作用于需要按序列号排序的地方。 1、Create Sequence (注释:你需要有CREATE SEQUENCE或CREATE ANY SEQUENCE权限) CREATE ...

    java自动生成Oracle sequence管理类

    Oracle自增长主键自动生成类 public static int nextID String table { if table null return 1; table table toLowerCase ; String strKey table; if sequences containsKey strKey { ...

    MySQL实现类似Oracle序列的方案

    本文记录了一个模拟Oracle序列的方案,重点是想法,代码其次。 Oracle序列的使用,无非是使用.nextval和.currval伪列,基本想法是: 1、MySQL中新建表,用于存储序列名称和值; 2、创建函数,用于获取序列表中的值;...

    详解ORACLE SEQUENCE用法

    在oracle中sequence就是序号,每次取的时候它会自动增加。sequence与表没有关系。 1、Create Sequence 首先要有CREATE SEQUENCE或者CREATE ANY SEQUENCE权限。 创建语句如下: CREATE SEQUENCE seqTest INCREMENT...

    oracle_sequence.rar_oracle

    介绍了在oracle里,如何实现序列,并举例说明序列的实现方法

    oracle序列主键自增长

    当向表中插入数据时,主键值自动加一. 实现方法1: 建立一个最小为1,最大为nomaxvalue的一个序列号会自动循环的序列 create sequence 序列名 increment by 1 start with 1 nomaxvalue nocycle; .......

    如何实现Oracle自增,序列,触发器都有

    如何实现Oracle主键自增,通过写sequence和触发器,很全面,绝对帮你解决问题

    Oracle中使用触发器(trigger)和序列(sequence)模拟实现自增列实例

    问题:在SQL Server数据库中,有自增列这个字段属性,使用起来也是很方便的。而在Oracle中却没有这个功能,该如何实现呢? 答:在Oracle中虽然没有自增...2、建立序列SEQUENCE 代码如下: create sequence user_seq in

Global site tag (gtag.js) - Google Analytics