【问题标题】:Error while firing SQL command from JDBC - java.sql.SQLSyntaxErrorException从 JDBC 触发 SQL 命令时出错 - java.sql.SQLSyntaxErrorException
【发布时间】:2019-05-22 07:47:12
【问题描述】:

我有一个在 sql plus 上触发的 sql 查询,我得到了结果。当我从 java 代码中触发相同的查询 - jdbc 我得到一个异常 -

java.sql.SQLSyntaxErrorException: ORA-00933: SQL 命令不正确 结束了。

查询是

select prod_id, prod_area, prod_name, step_name,
       to_char(entry_time, 'DD/MM/YYYY HH24:MI:SS') as entry_time,
       round(extract(day from current_timestamp - entry_time)*1440 +
             extract(hour from current_timestamp - entry_time)*60 +
             extract(minute from current_timestamp - entry_time)) as pending_minutes
from prodreport
where exit_time is null;

java代码

String query = "select prod_id,prod_area,prod_name,step_name,to_char(entry_time, 'DD/MM/YYYY HH24:MI:SS') as entry_time, round(extract(day from current_timestamp - entry_time)*1440 + extract(hour from current_timestamp - entry_time)*60 + extract(minute from current_timestamp - entry_time)) as pending_minutes from prodreport where exit_time is null;"

【问题讨论】:

  • 如果从查询字符串中删除尾随 ; 会发生什么?
  • 请提供您的 java 代码。 PreparedStatement 确实拆分了 SQL 并删除了分号
  • @jarlh 谢谢它的工作

标签: java sql oracle jdbc


【解决方案1】:

可能是因为您通过查询发送的分号(;)。请仔细看看它的使用方法,也许会有帮助。

分号

分号字符是语句终止符。它是 ANSI SQL-92 标准的一部分,但从未在 Transact-SQL 中使用。确实,有可能在不遇到分号的情况下编写 T-SQL 数年。

用法

有两种情况必须使用分号。第一种情况是您使用公用表表达式 (CTE),而 CTE 不是批处理中的第一个语句。第二个是您发出 Service Broker 语句并且 Service Broker 语句不是批处理中的第一个语句。

【讨论】:

  • 关于Oracle的问题,为什么要引用T-SQL规则?
猜你喜欢
  • 1970-01-01
  • 2016-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-09
  • 2020-02-14
  • 2014-01-16
  • 1970-01-01
相关资源
最近更新 更多