Вставьте последовательность и выберите - PullRequest
0 голосов
/ 08 июля 2011

Я пытаюсь вставить в таблицу, где идентификатор является следующим в последовательности, а некоторые другие значения извлекаются из таблицы.Я знаю, что это не сработает:

INSERT INTO ORDERS(order_id, foo1, foo2, foo3
VALUES(SEQUENCE_ORDERS.nextval,(SELECT foo1, foo2, foo3
                                FROM bar
                                WHERE X = Y))

Я только что попытался, и я получаю ошибку "недостаточно значений".

Я хотел знать, какой правильный синтаксис был длязаставить это работать.Я использую PLSQL в Oracle DB (часть процедуры, которую я пишу).

Я знаю, что select не должен быть внутри VALUES (), но как мне также добавить последовательность?Единственный вариант, о котором я могу подумать, это триггер на вставке, но я бы предпочел не делать этого.

РЕДАКТИРОВАТЬ: спасибо всем, как я понял, все опубликовали.Не знал, что это нормально иметь последовательность в select.

Ответы [ 3 ]

9 голосов
/ 08 июля 2011
INSERT INTO ORDERS(order_id, foo1, foo2, foo3)
SELECT SEQUENCE_ORDERS.nextval,foo1, foo2, foo3
                                FROM bar
                                WHERE X = Y
1 голос
/ 08 июля 2011

Попробуйте:

INSERT INTO ORDERS(order_id, foo1, foo2, foo3
SELECT SEQUENCE_ORDERS.nextval, foo1, foo2, foo3
                                FROM bar
                                WHERE X = Y
0 голосов
/ 08 июля 2011

Попробуйте переместить последовательность SEQUENCE в оператор SELECT.

...