我有一个游标,用于获取一些其他处理的初步信息。支持游标的查询可能不会返回任何行,在这些极少数情况下,我们希望引发一个特殊异常(在其他地方处理和记录,因此不会强制停止处理),以便用户知道最有可能发生的情况输入错误。这是它的样子:
open c_getPrs(in_pnum);
loop
fetch c_getPrs
into r_rpmRecord;
if c_getPrs%NOTFOUND then
raise X_INVALID_PNUM;
end if;
exit when c_getPrs%rowcount > 1 /*or c_getPrs%NOTFOUND*/;
end loop;
close c_getPrs;
问题是 if 语句总是执行,因此总是引发异常,即使返回一行也是如此。我不确定为什么。如果有更好的方法来处理这种逻辑,我也愿意;)