簡體   English   中英

Oracle SQL ROWNUM和NEXTVAL

[英]Oracle SQL ROWNUM and NEXTVAL

我創建了一個序列

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|      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|
+----+------+-------+

嘗試這個,

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

嘗試這個 :

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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM