Я создал последовательность по следующему утверждению:не удается вставить несколько значений в DB2 с помощью UNION ALL и генерировать идентификаторы из последовательности
CREATE SEQUENCE MAIN.MY_SEQUENCE START WITH 1 INCREMENT BY 1 CACHE 50;
И таблица по следующему утверждению:
CREATE TABLE MAIN.EMPLOYEES(
ID INTEGER NOT NULL,
NAME VARCHAR(512),
EMAIL VARCHAR(254),
PRIMARY KEY (ID)
)
сейчас когда я пытаюсь вставить новую запись, используя следующее заявление:
INSERT INTO MAIN EMPLOYEES (ID, NAME, EMAIL)
VALUES (MAIN.MY_SEQUENCE.NEXTVAL, 'Name 1', '[email protected]') UNION ALL
VALUES (MAIN.MY_SEQUENCE.NEXTVAL, 'Name 2', '[email protected]')
Я получаю сообщение об ошибке:
"NEXTVAL FOR MAIN.MY_SEQUENCE.NEXTVAL" cannot be specified in this context.. SQLCODE=-348, SQLSTATE=428F9, DRIVER=4.17.30
Когда я пытаюсь вставить одну строку, все работает нормально.
Я нашел список ограничений по использованию NEXT VALUE
here, но здесь не упомянуто мое дело или я не смог найти его.
Мой вопрос: возможно ли вставить несколько строк с использованием идентификатора из последовательности, и если да, то как я могу его достичь?
Спасибо, ваше решение правильно, но 'VALUES' должен быть указан только один раз, в противном случае я получаю сообщение об ошибке' Нет авторизованной подпрограммы «ЦЕННОСТИ» типа «FUNCTION», не имеющий были найдены совместимые аргументы. SQLCODE = -440, SQLSTATE = 42884, DRIVER = 4.17.30. Что касается вашего утверждения SELECT, для которого внешний SELECT объединяется с другим SELECT ... 'почему мой оператор' INSERT' считается 'SELECT' Я не понял этого момента. – Anatoly
.... Я хотел написать это, да. Я считаю, что утверждение считается неявным выражением 'SELECT', да, потому что это ярлык. Важной частью является заданная операция. –