Различные ответы SO, такие как this one и this one, подразумевают, что вы не можете использовать свой текущий подход.
Ответ Марин (который я одобрил) показывает, как выполнять отдельные инструкции INSERT
.
Вы также можете сделать это в одном запросе, используя оператор INSERT ALL
. Как с ответом Марин, вам нужно изменить ваш SQL:
INSERT ALL
INTO temp values(TO_DATE ('12-08-15', 'DD/MM/RRRR') - 1, 'rahul', 'START', '12-08-15 06:32:33.577676 PM')
INTO temp values(TO_DATE ('12-08-15', 'DD/MM/RRRR') - 1, 'abhishek', 'START', '12-08-15 06:32:33.577676 PM')
SELECT * FROM DUAL;";
Кроме того, я бы избежать форматной строки RRRR
, если не случится работать с не-Y2K совместимого приложения или это ваша заветная мечта, чтобы Создай. Принимая это шаг вперед, вы даже не нужно TO_DATE
здесь потому, что Oracle поддерживает дату ANSI синтаксис литерала:
INSERT ALL
INTO temp values(DATE '2015-12-08' - 1, 'rahul', 'START', '12-08-15 06:32:33.577676 PM')
INTO temp values(DATE '2015-12-08' - 1, 'abhishek', 'START', '12-08-15 06:32:33.577676 PM')
SELECT * FROM DUAL;
Дополнение
В случае последний столбец вставляется отметка времени типа, я бы рекомендовал использовать литерал timestamp ANSI. Если вы полагаетесь на неявное преобразование, используя формат отображения по умолчанию, это опасная практика, потому что кто-то может сломать ваш код, просто изменив формат отображения временной метки по умолчанию.
Ответ обновляются со значениями временных меток ANSI выглядит следующим образом (для дорожит ANSI необходимо использовать 24-часовой):
INSERT ALL
INTO temp values(DATE '2015-12-08' - 1, 'rahul', 'START', TIMESTAMP '2015-12-08 18:32:33.577676')
INTO temp values(DATE '2015-12-08' - 1, 'abhishek', 'START', TIMESTAMP '2015-12-08 18:32:33.577676')
SELECT * FROM DUAL;
Поймите, что при указании даты и метки времени значения, как это ваш Oracle код работает каждый раз, когда, независимо от текущей настройки сеанса или даты базы данных/времени.
Конечно, поскольку вы делаете это через Java, еще лучший подход заключается в использовании подготовленных операторов. Они также невосприимчивы к настройкам формата даты/времени, плюс еще более важное преимущество защиты от SQL-инъекции.
Является ли ** batchExecute ** вызовом из java-библиотеки (то есть JDBC или JPA или Hibernate и т. Д.) Или непосредственно в базу данных? – whyceewhite
Вы можете пройти, завернув инструкции в анонимный блок PL/SQL, но это имеет свои собственные ограничения. '" BEGIN INSERT ...; INSERT ...; END; ' –