У меня есть курсор, который используется для получения некоторой предварительной информации для некоторой другой обработки. Возможно, что запрос, поддерживающий курсор, может не вернуть никаких строк, и в этих редких случаях мы хотим вызвать специальное исключение (обработанное и зарегистрированное в другом месте, чтобы обработка не была полностью остановлена), чтобы пользователь знал, что наиболее вероятно плохой ввод. Вот как это выглядит:
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 ВСЕГДА выполняется, поэтому исключение всегда вызывается, даже когда возвращается строка. Я не уверен почему. Если есть лучший способ справиться с такой логикой, я тоже открыт для этого;)