错误Oracle查询ORA-00905

时间:2017-07-31 20:09:23

标签: sql oracle

我有这个查询

SELECT to_char(trunc(fecha,'HH')+(30*round(to_char( trunc(fecha,'MI'),'MI')/30))/1440,'DD/MM/YYYY hh24:mi:ss') AS fecha
     , SUM(total) AS total 
FROM (SELECT  FECHA_CREACION AS FECHA, Count(FECHA_CREACION) AS TOTAL
      FROM ROBOT_CONTEO_CONSULTA
      GROUP BY FECHA_CREACION)
WHERE fecha BETWEEN :fechaDesde AND :fechaHasta  
GROUP BY to_char(trunc(fecha,'HH')+(30*round(to_char( trunc(fecha,'MI'),'MI')/30))/1440,'DD/MM/YYYY hh24:mi:ss') 
ORDER BY fecha ASC;

但它给了我这个:

  

错误消息:ORA-00905:缺少关键字

但是,当我做这样的事情时

WHERE fecha BETWEEN CURRENT_DATE-20 AND CURRENT_DATE

确实有效。有什么问题?

我需要参数,因为我将用它创建一个视图。

完整错误:

Clic to see

1 个答案:

答案 0 :(得分:0)

我认为你混合了两件事。您当前从Java应用程序调用的查询以及要创建的视图。

在提供的查询中,您确实需要这两个您将在应用程序中绑定的变量query.setParameter("fechaDesde", myStartDate);

但是您不需要在视图中放置这些参数,只需尝试以下操作:

CREATE OR REPLACE VIEW MY_TEST_VIEW AS
SELECT to_char(trunc(fecha,'HH')+(30*round(to_char( trunc(fecha,'MI'),'MI')/30))/1440,'DD/MM/YYYY hh24:mi:ss') AS fecha
     , SUM(total) AS total 
FROM (SELECT  FECHA_CREACION AS FECHA, Count(FECHA_CREACION) AS TOTAL
      FROM ROBOT_CONTEO_CONSULTA
      GROUP BY FECHA_CREACION)
GROUP BY to_char(trunc(fecha,'HH')+(30*round(to_char( trunc(fecha,'MI'),'MI')/30))/1440,'DD/MM/YYYY hh24:mi:ss') 
ORDER BY fecha ASC;

然后在您的Java代码中,您将拥有类似

的内容
Query query = session.createQuery("FROM MY_TEST_VIEW WHERE FETCHA BETWEEN :fechaDesde AND :fechaHasta");
query.setParameter("fechaDesde ", myStartDateVar);
query.setParameter("fechaHasta", myEndDateVar);

编辑:请注意,您的fecha字段是VARCHAR2而不是日期。如果您尝试执行某个操作,可能会有奇怪的行为,因为Oracle将测试提供的字符串是否在其他两个varchars之间,并且您将得到奇怪的结果。它应该是一个正常工作的日期