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

    创建序列

    create sequence mysequence  
    increment by 1  
    start with 1   -- oracle 10g好像 nextval取到的第一个数是2,11g就没有这个问题
    minvalue 1  
    maxvalue 99999999999  
    cycle   
    nocache;  
    

    得到序列的语句

    select * from user_sequences where sequence_name = upper('mysequence');  -- sequence_name的值必须是大写的,哪怕创建的时候是小写的
    

    删除序列

    drop sequence mysequence;
    

    获取序列的当前值,不递增

    select mysequence.currval from dual;  -- 注currval的值是由nextval定义的,即至少执行一次nextval才能执行currval的值
    

    获取序列的当前值,递增,即把当前序列+increment后输出

    select mysequence.nextval from dual;
    

    修改序列的值

    • 1.删除原来的序列,重新创建序列,通过修改start with的值

    • 2.通过修改increment的值,修改当前的值,如下,把当前值改为100

          alter sequence mysequence  increment by 98;  -- 修改序列的增加值,这里的98好像不能通过select 100-2 from dual的方式获取,好奇怪
          select mysequence.nextval from dual;
          alter sequence mysequence increment by 1;
      
    • 3.通过存储过程进行循环,存储过程还有待练习(特别重要)

    创建序列语法

     create sequence [序列的名称]
     increment by  [n]   -- n的值可以为正也可以为负,但是不能为0 ,省略该值时,默认为1
     start with [n]    -- 指定生成的第一个序列值,升序时,缺省值为最小值,降序时,缺省值为最大值
     [minvalue n]  |  [nominvalue]  -- 创建序列的最大值 
     [maxvalue n]  |  [nomaxvalue]  -- 设定一个序列的最下值,不能小于初始值
     [cycle] | [nocycle]            --判断是否循环,循环,到达最大值时变为初始值
     [cache n] | [nocache]          --判断是否存在缓存,当需要的序列是连续的时候,一般不设置缓存
     [order desc|asc] | [noorder]  --排序 缺省值为升序
    

    修改序列

     alert sequence [序列的名称] [修改的属性,跟创建序列是一样的]
    

    1. nominvalue为升序指定最小值为1 ,为降序指定最小值-1026

    2. nomaxvalue 为升序指定最大值1027,为降序指定最大值-1

    3. 使用cache可能会出现数字不连续的原因,数据库把cache n个数组放入内存中,每次使用nextval,从内存中取数字,但是如果突然关机,会从之前内存最大值的下一个开始取,即使没用过的数字也不会被取到

    4. 序列是独立于回滚操作的,即sql执行不成功,但是nextvale的值不会变

    5. 序列只保证获取到的数的唯一的(nocycle的情况下),但是不保证序列的值是连续的,如上面两个原因,都会造成序列不连续

    不积跬步无以至千里
  • 相关阅读:
    日报10.29
    日报10.28
    日报10.27
    周进度总结-6
    日报10.25
    日报10.23
    日报10.22
    日报10.21
    日报10.18
    STL bitset
  • 原文地址:https://www.cnblogs.com/jinxiuze/p/7896203.html
Copyright © 2011-2022 走看看