Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Почему нет EXCEPTION?  [new]
rvk
Member

Откуда:
Сообщений: 60
У меня есть PACKAGE
PACKAGE pak1 is
CURSOR cursor1 is SELECT p1, p2 FROM table1;
record1 cursor1%ROWTYPE; 
....
FUNCTION func1 (l1 NUMBER, l2 varchar2) RETURN number;
END;


PACKAGE BODY  pak1 IS
...
FUNCTION func1 (l1 NUMBER, l2 varchar2) RETURN number IS
n number(1);
...
BEGIN
 IF l2='T2' THEN
   SELECT g1, g2 INTO record1 FROM table2 WHERE f1=l1;
   IF record1.g1= 'A' THEN n:=1;
   END IF;
   ...
 ELSE 
   ...
 END IF;
 IF n>0 THEN Return 1;
 ELSE Return 0;
 END IF;
END func1;
END;
Вывов функции func1:
select p1,pak1.func1(p1) from tabl3;
должен вернуть о или 1 в случае если есть запись в таблице table2 .
Если ее нет, то должен быть EXCEPTION no_data_found. А его нет, функция возвращает пустое значение.
Причем если дописать обработку EXCEPTION, то показывает no_data_found + нет значения:
FUNCTION func1 (l1 NUMBER,l2 varchar2 ) RETURN number IS
n number(1);
...
BEGIN
 IF l2='T2' THEN
   SELECT g1, g2 INTO record1 FROM table2 WHERE f1=l1;
   IF record1.g1= 'A' THEN n:=1;
   END IF;
   ...
 ELSE 
   ...
 END IF;
 IF n>0 THEN Return 1;
 ELSE Return 0;
 END IF;
 EXCEPTION when others then 
  dbms_output.put_line('FORMAT_ERROR_BACKTRACE  '||DBMS_UTILITY.FORMAT_ERROR_BACKTRACE );
  dbms_output.put_line('FORMAT_ERROR_STACK   '||DBMS_UTILITY.FORMAT_ERROR_STACK );
END func1;
select p1,pak1.func1(p1) from tabl3;
ERROR:
ORA-06503: PL/SQL: Function returned without value
ORA-06512: at "SCOTT.PAK1", line 1231

FORMAT_ERROR_BACKTRACE  ORA-06512: at "SCOTT.PAK1", line 1052
FORMAT_ERROR_STACK   ORA-01403: no data found
Не понимаю почему?
18 июл 06, 23:51    [2897196]     Ответить | Цитировать Сообщить модератору
 Re: Почему нет EXCEPTION?  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 10051
PL/SQL functions that are called from a SQL statement and that do not handle the exception NO_DATA_FOUND will be assumed to return NULL when a NO_DATA_FOUND exception is raised.

SY.
19 июл 06, 00:06    [2897236]     Ответить | Цитировать Сообщить модератору
 Re: Почему нет EXCEPTION?  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116251
Поиск как всегда

Почему не возникает исключение
19 июл 06, 00:12    [2897248]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить