我继承了一些包含以下错误处理的代码:
if v_complete then
if v_response_time is null then
raise_application_error(-20999, 'Response Time Null');
end if;
update eventlog e
set e.responded = get_work(v_callback, v_response_time),
complete_flag='Y'
where rowid = v_min_row;
end if;
对系统的更改意味着某些情况下会抛出NULL值,而不是引发应用程序错误,我希望它忽略这些行。如何将raise_application_error更改为忽略或跳过?
答案 0 :(得分:2)
您可以通过添加
完全过滤结果集中的NULL项and (v_response_time is not null)
到查询的where子句
答案 1 :(得分:2)
听起来你只需要:
if v_complete then
update eventlog e
set e.responded = get_work(v_callback, v_response_time),
complete_flag='Y'
where rowid = v_min_row
and v_response_time is not null;
end if;
答案 2 :(得分:0)
最简单的事情是:
if v_complete AND v_response_time IS NOT NULL then
update eventlog e
set e.responded = get_work(v_callback, v_response_time),
complete_flag='Y'
where rowid = v_min_row;
end if;
这可能会或可能不会满足您的要求 - 我不确定我是否理解您要做的事情 - 但要看一下,看看这是否符合您的要求。
祝你好运。
答案 3 :(得分:0)
如果要更新事件日志,即使响应时间为NULL,则可以在NULL时为v_response_time提供默认值。我通常使用' 1900-01-01 00:00:00.000'。这可能很有用。
if v_complete then
--if v_response_time is null then
--raise_application_error(-20999, 'Response Time Null');
--end if;
update eventlog e
set e.responded = get_work(v_callback, COALESCE(v_response_time,'1900-01-01 00:00:00.000')),
complete_flag='Y'
where rowid = v_min_row;
end if;