2009-04-28 32 views
2

我需要在DB2(9.1版)中獲取序列的下一個值兩次。而不是執行以下兩次:在DB2中增加一個序列

SELECT nextval FOR schema.sequence AS id 
FROM dual 

我想這樣做:

SELECT nextval FOR schema.sequence AS id1, 
     nextval FOR schema.sequence AS id2 
FROM dual 

除上述僅遞增一次:

ID1   ID2   
----------- ----------- 
     643   643 

    1 record(s) selected. 

我是被迫在只查詢兩次,或者有沒有辦法在1個查詢中增加兩次?

回答

6

這是AA稍微複雜一些沒有順序,也沒有雙表,但它工作(我在DB2 V上運行它驗證。 9)。

WITH GENERATED (KEYVAL) AS 
(select 1 
    from sysibm.sysdummy1 
    UNION ALL 
SELECT KEYVAL + 1 
    FROM GENERATED 
    WHERE KEYVAL < 2)  -- how many you want 

SELECT KEYVAL AS INCREMENT_NUMBER, NEXTVAL FOR schema.sequence 
    FROM GENERATED; 

這是我最喜歡的代碼,它是遞歸SQL。你可以在沒有序列對象的情況下做到,它只會產生幾行數字。我有時使用它來插入生成的測試數據行。

0

好吧,這是一個黑客,但下面的作品...我很想看到一個更乾淨的答案,所以請發佈一個答案,如果你知道一個!

SELECT nextval FOR schema.sequence AS id 
FROM (SELECT 1 FROM dual UNION ALL SELECT 1 FROM dual) temp 

與結果:

ID   
----------- 
     669 
     670 

    2 record(s) selected. 
0

存在DB2

+1

schema.sequence意在成爲我需要從中抽取的序列的佔位符。dual旨在成爲一個泛型表,表明我不在乎我選擇哪個表,它實際上具有在其他數據庫中表示:http://en.wikipedia.org/wiki/DUAL_table – 2009-11-10 09:01:48

0

只是因爲我對你百般挑剔邁克:-P,這裏是另一種解決方案:

VALUES NEXT VALUE FOR schema.sequence, NEXT VALUE FOR schema.sequence; 

如果你這樣做的兩排,喜歡這裏它將工作。但是,如果你將它做成一行:

VALUES (NEXT VALUE FOR schema.sequence, NEXT VALUE FOR schema.sequence); 

它將返回相同的序列值。 :-(