最近在用Oracle写存储过程的过程中,报了如下的错误。在网上查了资料,说是错误应该是在使用to_date()这个函数时发生的。而自己的存储过程确实也使用了这个函数。但是还是不知道具体的原因。在BI同事的帮助下,找到了错误的原因。
排错的sql如下:
declare
l_data_build_time varchar2(40);
l_data_build_time_d date;
begin
for x in (select distinct data_build_time from bi_ods.dr_crdt_rskdoo_rslt) loop #将需要to_data()的列放入循环中
l_data_build_time := x.data_build_time;
select to_date(l_data_build_time, 'yyyy-mm-dd')
into l_data_build_time_d
from dual;
end loop;
exception
when others then
dbms_output.put_line(l_data_build_time);
end;
查错思路如下:将to_date()操作的语句放入到for循环中去,如果转换失败,则将异常的列展现出来。有点像python的try...except语句。sql执行结果如下:
发现有一行格式与其它行不一致,真是坑爹。。。。