Увеличить последовательность дважды в DB2
Мне нужно дважды получить следующее значение последовательности в 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 ответа:
Это немного сложно, но работает (я проверил, запустив его в 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. Вы можете сделать это без объекта последовательности, и он будет просто генерировать несколько строк чисел. Я иногда использую его для вставки строк сгенерированных тестовых данных.
Хорошо, это хак, но работает следующее... Я хотел бы увидеть более чистый ответ, поэтому, пожалуйста, напишите ответ, если вы его знаете!
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.
Просто потому, что я придираюсь к тебе Майк : - П, вот еще одно решение:
VALUES NEXT VALUE FOR schema.sequence, NEXT VALUE FOR schema.sequence;
Это будет работать, если вы сделаете это как две строки, как здесь. Но если вы сделаете это как один ряд:
VALUES (NEXT VALUE FOR schema.sequence, NEXT VALUE FOR schema.sequence);
Он вернет то же значение последовательности. :- (