带有to_date函数的ORA-00911错误

时间:2011-10-22 23:42:34

标签: sql oracle oci

此请求按预期工作:

select dit_in.id data_item_in, dit_out.id data_item_out, alg.id algo_id 

from algorithm_run arun

join algorithm_run_of arof on
arof.algorithm_run_id = arun.id

join algorithm_run_input arin on
arin.algorithm_run_id = arun.id

join data_item dit_in on
dit_in.id = arin.data_item_id

join algorithm alg on
alg.id = arof.algorithm_id

join algorithm_run_output arout on
arout.algorithm_run_id = arun.id

join data_item dit_out on
dit_out.id = arout.data_item_id

where alg.id in (182,183,143,162,125,222)

不幸的是,当我在最后添加时出现错误:

 and arun.start_time >= to_date(’01/jun/2011’,’dd/mm/yyyy’) 
 and arun.start_time < to_date(’01/jul/2011’,’dd/mm/yyyy') 

我正在使用网络界面,错误信息是:

  

警告:oci_execute()[function.oci-execute]:ORA-00911:第117行/opt/csw/apache2/share/htdocs/DAE/sites/default/modules/data_repository/data_repository.inc中的无效字符

     

警告:oci_fetch_row()[function.oci-fetch-row]:ORA-24374:在获取或执行之前定义未完成并在/ opt / csw / apache2 / share / htdocs / DAE / sites / default / modules中获取第852行的/daedatabase/daedatabase_db.inc。

3 个答案:

答案 0 :(得分:5)

试试这个:

 and arun.start_time >= to_date(’01/06/2011’,’dd/mm/yyyy’) 
 and arun.start_time < to_date(’01/07/2011’,’dd/mm/yyyy’) 

 and arun.start_time >= to_date(’01/jun/2011’,’dd/mon/yyyy’) 
 and arun.start_time < to_date(’01/jul/2011’,’dd/mon/yyyy’) 

问题是你的日期字符串(01 / jun / 2011)与格式说明符(dd / mm / yyyy)不匹配。您需要更改日期或说明符,如上例所示。

答案 1 :(得分:5)

and arun.start_time < to_date(’01/jul/2011’,’dd/mm/yyyy') 

我是否在最后一位看到两种不同类型的引号字符?单引号和反引号?或者这只是剪切/粘贴或翻译问题?

答案 2 :(得分:2)

作为Phil points out,您的字符串包含在两个不同的引号中。看起来你主要使用来自文字处理器的花哨引号。这是一个问题,因为Oracle期望纯ASCII撇号(ASCII 39)。

这肯定会解释为什么你会收到ORA-00911错误。

要解决此问题,您只需将所有替换为'

为了避免将来使用,您应该在编写代码时使用文本编辑器或IDE。