zoukankan      html  css  js  c++  java
  • oracle中的序列

    今天研发人员问起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. 可以alterstart至以外的所有sequence参数.如果想要改变start值,必须 drop sequence  re-create .
      
      Alter sequence 的例子:
      ALTER SEQUENCE emp_sequence
      INCREMENT BY 10
      MAXvalue 10000
      CYCLE   -- 10000后从头开始
      NOCACHE 
      
      影响Sequence的初始化参数:
    SEQUENCE_CACHE_ENTRIES =
    设置能同时被cachesequence数目。

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

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

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

    5
    sequence属于什么对象

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

    其实在创建了sequence后,每个表都可以使用这个sequence,但是这样会引起应用的很多麻烦,因此,建议每个表都使用一个sequence
  • 相关阅读:
    Vagrant 扩大磁盘根目录
    阿里云 轻量应用服务器 vnc 远程桌面连接
    图片加水印C#源代码
    Asp.net网站Pdf加水印C#源代码
    [FAQ] uni-app 如何让页面不展示返回箭头图标
    [PHP] composer, PHP Fatal error: Allowed memory size of xx bytes exhausted
    [FE] uni-app 导航栏开发指南
    [FE] uni-app 动态改变 navigationBarTitleText 导航标题
    [FE] yarn, npm 切换镜像源
    [FAQ] Phpstorm 代码提示功能失效问题
  • 原文地址:https://www.cnblogs.com/jameshappy/p/1427599.html
Copyright © 2011-2022 走看看