我有一个sql查询,该查询在sql plus上触发,并且得到结果。当我从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;"
答案 0 :(得分:0)
以下一个或两个原因
1)可能是因为您的Java代码查询包含as pending_minutes
。您将结果存储在对象中,与使用sql developer在Sql Result工作表中显示的结果不同。
2)where exit_time is null
可能对Java代码执行无效(通常取决于您要使用哪种jdbc方法执行-向我们展示您究竟在准备语句和执行语句的方式 ),
尝试这样的事情
String exit_time = "null"
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)) from prodreport where exit_time is " + exit_time ;
答案 1 :(得分:0)
可能是由于您随查询发送的分号(;)。请仔细使用它,可能会有所帮助。
分号
分号字符是语句终止符。它是ANSI SQL-92标准的一部分,但从未在Transact-SQL中使用。确实,多年来编写T-SQL都可能不会遇到分号。
用法
在两种情况下,您必须使用分号。第一种情况是您使用公用表表达式(CTE),而CTE不是批处理中的第一条语句。第二个是您发布Service Broker语句的位置,而Service Broker语句不是批处理中的第一个语句。