遇到无效的数字错误,调用下面的oracle存储过程

时间:2016-07-25 13:36:35

标签: oracle

SELECT Ticket, ETRs, "Last ETR","Last ETR Time Change","STAR Restore Time","Restore Time - Last ETR"
         FROM(
                SELECT e.xsystemjob Ticket,
                       a.eventkey Event,
                      (select count(generatedtime) from obvwh.ops_ertchangelog_fact where eventkey = a.eventkey) ETRs,
                      to_char(a.ERT, 'MM/DD/YYYY HH24:MI:SS') "Last ETR", --GENERATEDTIME,
                      to_char(generatedtime, 'MM/DD/YYYY HH24:MI:SS') as "Last ETR Time Change",
                      to_char(e.restdate,'MM/DD/YYYY HH24:MI:SS') as "STAR Restore Time",
                      round(((e.restdate - a.generatedtime) * 1440),0) as "Restore Time - Last ETR"
                FROM obvwh.ops_ertchangelog_fact a
                join obvwh.ops_event_dim e
                on a.eventkey = e.eventkey
                where a.generatedtime = (select max(generatedtime) from obvwh.ops_ertchangelog_fact where eventkey = a.eventkey)
              )
          WHERE Substr(Ticket,0,1) = region
          AND to_char("Last ETR", 'MM/DD/YYYY') between to_char(start_date,'MM/DD/YYYY') and to_char(end_date,'MM/DD/YYYY');

1 个答案:

答案 0 :(得分:0)

从您的内部查询中,SearchResult是一个字符串,表示格式为Last ETR的列值。您正在尝试将该字符串转换为字符串,传递单个格式掩码,这就是抛出错误。

您可以通过更简单的演示看到相同的事情:

MM/DD/YYYY HH24:MI:SS

您可以将字符串显式转换为日期然后再转发:

select to_char('07/18/2016 12:13:14', 'MM/DD/YYYY') from dual;

Error report -
SQL Error: ORA-01722: invalid number

...但是在比较的情况下,如果你所比较的范围可以跨越一年结束,那么无论如何还是没有意义 - 你正在使用的格式掩码不是&# 39; t允许简单比较。假设select to_char(to_date('07/18/2016 12:13:14', 'MM/DD/YYYY HH24:MI:SS'), 'MM/DD/YYYY') from dual; TO_CHAR(TO ---------- 07/18/2016 start_date是日期(时间设置为午夜),您可以这样做:

end_date

甚至更简单,使用原始的原始AND to_date("Last ETR", 'MM/DD/YYYY HH24:MI:SS') between start_date and end_date; 值(可能已经是日期),并将其转换为字符串 - 如果这实际上是正确的事情 - 在最外面的选择列表中。< / p>

我不完全确定为什么你在这里有一个内联视图,或者你为什么要使用子查询来获取计数,因为你已经查询ERT - 也许你想在这里使用分析函数。