2014-01-30 2 views
0

Можно ли прервать вставку ... выбрать предложение из Java? Используя JDBC или Hibernate, это не имеет значения. БД - это Oracle.Abort insert ... select clause

Я считаю, что это невозможно, потому что есть один вызов БД, и процесс выполняется в Oracle, а не в JVM.

+1

It ** есть ** возможно! Посмотрите на класс 'Statement'. Существует способ отменить выполнение запроса: http://docs.oracle.com/javase/7/docs/api/java/sql/Statement.html#cancel() – bobbel

ответ

1

Oracle OCI (драйвер C) обеспечивает функцию OCIBreak(). Он даже потокобезопасен, и вы можете вызывать его из любой ветки bg, в то время как основной поток использует одно и то же соединение.

Возможно, что Statement.cancel() делает то же самое.

Это OCIBreak() требует поездка туда и обратно на сервер БД (т.е. сеть должна быть функциональной), а затем основной поток получает ошибку:

java.sql.SQLException: ORA-01013: user requested cancel of current operation

Вы должны быть в состоянии, чтобы отметить это исключение как некритическое на JBOSS уровень (с использованием ExceptionSorter).

PS: Мне действительно интересно, можно ли это вызвать из спящего режима. Поскольку JPA оставляет много длинных запросов на наших серверах БД.