【问题标题】:Java JDBC executeUpdate not working on Delete SQL with TRUNC function in where clauseJava JDBC executeUpdate不适用于在where子句中使用TRUNC函数删除SQL
【发布时间】:2016-11-04 14:57:33
【问题描述】:

以下删除语句在 SQL 开发人员中运行良好,但使用 JDBC api executeUpdate() 执行时不起作用。

删除 where 子句后,它的工作正常。

Delete from Tab1 
where TRUNC(CREATED_TS) <= TRUNC(ADD_MONTHS(SYSDATE,-3))

我无法找出问题所在,因为没有打印异常或错误。只有代码执行在 executeUpdate() 方法处被挂起。

数据库:Oracle 11g Java:1.6

【问题讨论】:

  • 您在数据库中看到了什么?数据库会话是否处于活动状态?是不是被什么东西挡住了?它在阻止什么?
  • 不...我已经在我的帖子中提到过。我无法提供太多信息,因为我没有任何错误/堆栈跟踪
  • 向我们展示您的 Java 代码。如果您已经从 SQL Developer 中删除了这些行,那么当从您的应用程序运行时,该语句不再删除某些内容,我并不感到惊讶。
  • 在运行 Java 代码之前,您在 SQLDeveloper 中发出的 ROLLBACK 是否是 DELETE?如果没有,您在 SQLDeveloper 中的活动事务正在锁定您尝试使用 executeUpdate() 更新的相同行。

标签: java sql oracle jdbc


【解决方案1】:

由于没有异常或堆栈跟踪,因此只能猜测。

  1. 可能异常被 Java 代码吞没了。看看,如果可能的话打印出来。

  2. where TRUNC(CREATED_TS) &lt;= TRUNC(ADD_MONTHS(SYSDATE,-3)) 将阻止使用 CREATED_TS(如果有的话)上的索引,并且可能会减慢进程。并且可能发生了超时。我会检查设置的 Java 端的连接/语句超时设置。

【讨论】:

    【解决方案2】:

    问题不在于删除 SQL。问题在于另一个会话,其中有一些未提交的更改。因为从 java 代码中删除 SQL 被无限期挂起。在另一个会话上发出提交时,java api executeUpdate() 响应并开始正常工作。

    问题与以下链接中的问题类似:

    Oracle database is hanging infinitly in UPDATE queries

    【讨论】:

      猜你喜欢
      • 2017-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多