Oracle SQL ROWNUM和NEXTVAL

Oracle SQL ROWNUM和NEXTVAL,sql,oracle,oracle11g,sequence,Sql,Oracle,Oracle11g,Sequence,我创建了一个序列 CREATE SEQUENCE name_seq START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE; 然后在我的查询中使用它: select Name, ROWNUM, name_seq.NEXTVAL from myTable; 结果如下: +----+------+-------+ |Name|ROWNUM|NEXTVAL| +----+------+-------+ |A | 1| 1| |B

我创建了一个序列

CREATE SEQUENCE name_seq
START WITH 1
INCREMENT BY   1
NOCACHE
NOCYCLE;
然后在我的查询中使用它:

select Name, ROWNUM, name_seq.NEXTVAL
from myTable;
结果如下:

+----+------+-------+
|Name|ROWNUM|NEXTVAL|
+----+------+-------+
|A   |     1|      1|     
|B   |     2|      2|
|C   |     3|      3| 
|D   |     4|      4|
|E   |     5|      5|
|F   |     6|      6|
|G   |     7|      7|
|H   |     8|      8|
|I   |     9|      9|
|J   |    10|     10|
+----+------+-------+
由此,我希望输出是,在我要声明的数字之后,使用序列的下一个值。例如,我将使用4。输出应如下所示:

+----+------+-------+
|Name|ROWNUM|NEXTVAL|
+----+------+-------+
|A   |     1|      1|     
|B   |     2|      2|
|C   |     3|      3| 
|D   |     4|      4|
|E   |     5|      5|
|F   |     6|      6|
|G   |     7|      7|
|H   |     8|      8|
|I   |     9|      9|
|J   |    10|     10|
+----+------+-------+
在第一次运行中:

+----+------+-------+
|Name|ROWNUM|NEXTVAL|
+----+------+-------+
|A   |     1|      1|     
|B   |     2|      1|
|C   |     3|      1| 
|D   |     4|      1|
|E   |     5|      2|
|F   |     6|      2|
|G   |     7|      2|
|H   |     8|      2|
|I   |     9|      3|
|J   |    10|      3|
+----+------+-------+
然后在第二次运行中:

+----+------+-------+
|Name|ROWNUM|NEXTVAL|
+----+------+-------+
|A   |     1|      4|     
|B   |     2|      4|
|C   |     3|      4| 
|D   |     4|      4|
|E   |     5|      5|
|F   |     6|      5|
|G   |     7|      5|
|H   |     8|      5|
|I   |     9|      6|
|J   |    10|      6|
+----+------+-------+
试试这个:

Select name,rownum,floor((name_seq.NEXTVAL-1)/4)+1 fl
from myTable

只需减去序列的最后一个数字

with seq_cur_val as(
    select last_number seq_cv
    from user_sequences
    where sequence_name='NAME_SEQ'
)
select name, rownum,
    floor((name_seq.nextval-seq_cv)/4)+1
from myTable,seq_cur_val;
试试这个

CREATE SEQUENCE name_test_seq
START WITH 1
INCREMENT BY   1
NOCACHE
NOCYCLE;

CREATE OR REPLACE FUNCTION get_next_val     (p_num NUMBER) RETURN NUMBER
IS
BEGIN
    IF p_num = 1 THEN
        RETURN name_test_seq.NEXTVAL;
    ELSE
        RETURN name_test_seq.CURRVAL;
    END IF;
END;
/

select rownum rown, get_next_val(MOD(rownum, :p_num))
  from dual
connect by rownum <= 10
CREATE SEQUENCE name\u test\u seq
从1开始
增加1
诺卡奇
NOCYCLE;
创建或替换函数get_next_val(p_num NUMBER)返回编号
是
开始
如果p_num=1,则
返回名称_test_seq.NEXTVAL;
其他的
返回名称\测试\顺序CURRVAL;
如果结束;
终止
/
选择rownum rown,获取下一个值(MOD(rownum,:p_num))
来自双重

第二种情况下通过rownum连接
NEXTVAL:=TRUNC((rownum-1)/4)+1
。这就是你要找的吗?不,伙计。我需要使用我创建的序列dok,然后使用
NEXTVAL\u COLUMN:=TRUNC((您的SEQ.NEXTVAL-1)/4+1
。您的答案得到了我想要的结果,但序列当前值将与第三个序列中的最后一个值不同column@BobJarvis哥们,我更新了我的问题,你不会这样做的。这是固定代码,只适用于固定序列,对于这种固定情况,你甚至不需要它,只需要
地板(rownum-1)…
@PhamX.Bach我添加了第二次运行输出,以使我的问题更清楚