本帖最后由 a120852620 于 2011-04-20 22:15:12 编辑

解决方案 »

  1.   

    经过测试,确实如果,怀疑是 seq_1_23.currval = 23  这里出的问题。
      

  2.   

    是啊,很奇怪,莫非sequence有什么奇怪的用法或者限制不成?
      

  3.   


    --其实是你case when 的原因,在Oracle序列中,要先有nextval,才会有currval,
    --因此你case when 这部分,对于序列seq_vid来说,并不知道是否可以用seq_vid.currval来取值,
    --因此每次都会先seq_vid.nextval后再来取currval
    --你可以换个思路,如下:select seq_1_23.nextval group1,
           ceil(
                decode(
                        mod(seq_vid.nextval,23),
                        0,
                        seq_vid.currval+1,
                        seq_vid.currval) 
                 /23) group2
    from dual;
      

  4.   


    --其实简单点直接用向下取整就可以了:
    select seq_1_23.nextval group1,
           floor(seq_vid.nextval/23)+1 group2
    from dual;
      

  5.   


    序列首次引用是,只能seq.nextval
      

  6.   

    问题解决,散分,感谢CSDN,感谢各位大侠
      

  7.   

    when seq_1_23.currval = 23 then
    你的等于判断是不是逻辑上有问题,为什么不用大于等于呢。