Оракловская SQL-машина и NO_DATA_FOUND
Необработанный NO_DATA_FOUND в функции приводит к тому, что любой SELECT с этой функцией вернет NULL, а не выдаст NO_DATA_FOUND! При этом та же функция в PL\SQL работает ожидаемым образом. Пример:SQL> create or replace function no_data
То же касается и pipelined-функций, в которых есть необработанное исключение NO_DATA_FOUND (то есть выполнение функции прервется в каком-то месте без всяких исключений, и попробуй пойми, почему функция не выдает очередную строку). Незнание этой тонкости работы SQL-машины оракла привело меня к полуторачасовому головняку (разумеется, в пятницу вечером).
2 return number
3 is
4 res number := 0;
5 begin
6 select 1 into res from dual
7 where 1 = 0;
8 return res;
9 end;
10 /
Функция создана.
SQL> select no_data from dual;
NO_DATA
----------
SQL> declare
2 dummy number;
3 begin
4 dummy := no_data;
5 end;
6 /
declare
*
ошибка в строке 1: ORA-01403: no data found
ORA-06512: at "HARPER.NO_DATA", line 6
ORA-06512: at line 4



