#oracle
Вопрос:
Мне нужно выполнить несколько вставок в Oracle.
insert into table_name (ID, code, date_t)
values (schema_name.SEQ$table_name.NEXTVAL, '232323232323' , to_date('2020-09-01','YYYY-MM-DD'));
insert into table_name (ID, code, date_t)
values (schema_name.SEQ$table_name.NEXTVAL, '242424242424' , to_date('2020-09-01','YYYY-MM-DD'));
Я не могу выполнить их при попытке использовать простое выполнение, потому что это приводит к ошибке: ora-00933 sql command not properly ended
Но когда я использую сценарий «Выполнить как«, он работает нормально. Главная проблема в том, что я не могу объяснить людям, как завершить этот сценарий в консоли.
Может быть, есть какие-то другие варианты для выполнения нескольких вставок в Oracle?
Комментарии:
1. Какой клиент/IDE вы используете?
2. Как насчет триггера, который обновляется
ID
из последовательности?
Ответ №1:
Воспользуйся INSERT ... SELECT
:
insert into table_name (ID, code, date_t)
WITH data (code, date_t) AS (
SELECT '232323232323', DATE '2020-09-01' FROM DUAL UNION ALL
SELECT '242424242424', DATE '2020-09-01' FROM DUAL
)
SELECT SEQ$table_name.NEXTVAL, code, date_t FROM data;
Вы также можете использовать INSERT ALL
; однако вам придется перепрыгнуть через некоторые обручи, чтобы заставить его работать с последовательностью, поэтому я бы посоветовал не использовать эту опцию:
INSERT ALL
WHEN rn = 1 THEN
INTO table_name (id, code, date_t)
VALUES (SEQ$table_name.NEXTVAL, '252525252525', DATE '2020-09-01')
WHEN rn = 2 THEN
INTO table_name (id, code, date_t)
VALUES (SEQ$table_name.CURRVAL, '262626262626', DATE '2020-09-01')
SELECT LEVEL AS rn
FROM DUAL
CONNECT BY LEVEL <= 2;