【问题标题】:Abort insert ... select clause中止插入...选择子句
【发布时间】:2014-01-30 18:12:04
【问题描述】:
是否可以从 Java 中止 insert ... select 子句?使用 JDBC 或 Hibernate 都没有关系。数据库是 Oracle。
我认为这是不可能的,因为只有一个 DB 调用并且进程在 Oracle 中运行,而不是在 JVM 中。
【问题讨论】:
标签:
java
sql
oracle
hibernate
【解决方案1】:
Oracle OCI (C 驱动程序)提供OCIBreak() 函数。它甚至是线程安全的,您可以从任何 bg 线程调用它,而主线程使用相同的连接。
也许Statement.cancel() 做同样的事情。
此OCIBreak() 需要往返 DB server (即网络必须正常运行),然后主线程收到错误:
java.sql.SQLException: ORA-01013: 用户请求取消当前操作
您应该能够在 JBOSS 级别上将此异常标记为非关键(使用 ExceptionSorter)。
PS: 我真的很好奇这是否可以从休眠中调用。由于 JPA 在我们的数据库服务器上留下了许多长时间运行的查询。