Если инструкция SELECT INTO не возвращает хотя бы одну строку, ORA-01403 выбрасывается.
Для каждой другой СУБД я знаю, что это нормально для SELECT. Только Oracle рассматривает SELECT INTO так.
CREATE OR REPLACE PROCEDURE no_data_proc IS
dummy dual.dummy%TYPE;
BEGIN
BEGIN
SELECT dummy
INTO dummy
FROM dual
WHERE dummy = 'Y';
EXCEPTION
WHEN no_data_found THEN
dbms_output.put_line('Why is this needed?');
END;
END no_data_proc;
Почему?
По-моему, вам действительно не нужно это исключение. Это слишком много накладных расходов. Иногда это удобно, но вам нужно написать целые BEGIN, EXCEPTION, WHEN, END Block.
Есть ли какие-то существенные причины, которые я не вижу?