Увеличить последовательность дважды в DB2 - PullRequest
2 голосов
/ 28 апреля 2009

Мне нужно получить следующее значение последовательности дважды в DB2 (версия 9.1). Вместо того, чтобы выполнить следующее дважды:

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 запрос?

Ответы [ 4 ]

6 голосов
/ 02 февраля 2010

Это немного сложно, но работает (я проверил, запустив его в 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 голосов
/ 05 февраля 2010

Просто потому, что я клюю на тебя, Майк :-P, вот еще одно решение:

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

Это будет работать, если вы сделаете это в два ряда, как здесь. Но если вы сделаете это одной строкой:

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

он вернет то же значение последовательности. : - (

0 голосов
/ 04 ноября 2009

нет последовательности или двойной таблицы в DB2

0 голосов
/ 29 апреля 2009

Хорошо, это взлом, но работает следующее ... Я бы хотел увидеть более чистый ответ, поэтому, пожалуйста, опубликуйте ответ, если вы его знаете!

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