【发布时间】:2018-02-06 04:05:25
【问题描述】:
这是我的功能
declare
b_date date;
reset_status integer:=0 ;
begin
select lst_reset_dt_tm
into b_date
from TABLE1
where schm_sts in ('READY','NOT READY')
and schm_nm like 'SC%'
and upper(srvr_nm) = ( select upper(machine)
from v$session
where program like '%(PMON)%');
select 1
into reset_status
from TABLE1
where schm_nm = upper('OC1')
and lst_reset_dt_tm > to_date(b_date, 'mm/dd/yyyy')
and upper(srvr_nm) = ( select upper(machine)
from v$session
where program like '%(PMON)%');
dbms_output.put_line(reset_status);
exception
when no_data_found then
dbms_output.put_line(reset_status);
end;
/
spool off
当我编译时出现错误 宣布 * 第 1 行的错误: ORA-01858: 在需要数字的地方发现了一个非数字字符 ORA-06512:在第 16 行
基本上查询的下半部分失败了,但这在 oracle 11g 机器上有效,但在 oracle 12c 上无效。谁能帮我调试一下?
【问题讨论】:
-
那是列
b_date的数据类型? -
不是一个变量,它将存储值 lst_reset_dt_tm,稍后将用于比较
-
该块不称为函数,它是一个匿名块。
-
您将变量
b_date声明为date数据类型。那么,这在您的代码中做了什么?... to_date(b_date, 'mm/dd/yyyy')如果您想将日期截断到一天的开始,请使用trunc(b_date),而不是某种形式的to_date()。 -
代码中的“第 16 行”到底是哪一行?根据您发布的内容(格式化,包括空白行),它将是
where program like '%(PMON)%');,但我怀疑这一行会引发您报告的错误。to_date()更有可能应用于日期;该错误可能是由您的nls_date_format设置引起的,这可能因会话而异(解释为什么这不会在另一台机器上失败;如果 Oracle 不是试图修复我们的错误的老大哥,那应该每次都失败机器)。