我想请教一个关于alter sequence用法的问题。
如果某sequence修改的最大值或者最小值的范围中不包含当前值,那么在alter sequence之后,通过CurrVal或者NextVal得到的数据是什么?
举个例子,首先创建一个sequence如下:
CREATE SEQUENCE TESTSQC START WITH 20 INCREMENT BY 1 MINVALUE 10 MAXVALUE 30 CYCLE
在多次调用NextVal之后当前值已经达到了28,此时通过下列语句转变sequence的最大值如下:
ALTER SEQUENCE MAXVALUE 25,这样,其实前面的当前值(28)已经超过了重新设定的最大值(25),
在这种情况下,如果在alter以后立刻调用CurrVal或者NextVal会得到什么结果呢?另外,这是一个cycled的sequence,如果这个sequence是nocycled sequence,在类似的情况发生时,alter以后立刻调用CurrVal或者NextVal会得到什么结果?请高人赐教,谢谢!

解决方案 »

  1.   

    主要是cache的问题,因为cache的存在所以才会有这个情况,cache就是为了满足大的并发处理.因此sequence会提前向前推进.而不是等你调用时才给你分配value
      

  2.   


    这种情况,你运行:
    ALTER SEQUENCE MAXVALUE 25
    系统就会提示当前序列的最大值已经大于25,不能变小,
    所以只能取比最大值大值!
      

  3.   

    如果当前cache里面的最大值大于新定义的最大值,是不是就会返回出错的?
      

  4.   

    这种情况,你运行: 
    ALTER SEQUENCE MAXVALUE 25 
    系统就会提示当前序列的最大值已经大于25,不能变小, 
    所以只能取比最大值大值!
    ——明白了,谢谢啦