关于oracle序列用法的一位 本帖最后由 a120852620 于 2011-04-20 22:15:12 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 经过测试,确实如果,怀疑是 seq_1_23.currval = 23 这里出的问题。 是啊,很奇怪,莫非sequence有什么奇怪的用法或者限制不成? --其实是你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) group2from dual; --其实简单点直接用向下取整就可以了:select seq_1_23.nextval group1, floor(seq_vid.nextval/23)+1 group2from dual; 序列首次引用是,只能seq.nextval 问题解决,散分,感谢CSDN,感谢各位大侠 when seq_1_23.currval = 23 then你的等于判断是不是逻辑上有问题,为什么不用大于等于呢。 oracle分页用rownum分页!求高手帮忙噶! 安装oracle10g的时候报了个错误, Oracle表空间的备份和恢复命令是什么? oracle不能用spfile启动,怎么解决? 数据库临时表的问题 视图创建语句问题 SQL脚本转换为Oracle脚本,在线急等!!!!!!!!!! 关于ORACLE树的问题,请高手看看,在线等 C:\>imp system/manager inctype=complete FULL=Y FILE=030718 统计问题,高手请进。 SQL 如何改变直接查询出来的结果 linux 安装 oracle10g 32 位 报错了
--其实是你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;
--其实简单点直接用向下取整就可以了:
select seq_1_23.nextval group1,
floor(seq_vid.nextval/23)+1 group2
from dual;
序列首次引用是,只能seq.nextval
你的等于判断是不是逻辑上有问题,为什么不用大于等于呢。