Разница между oracle call и execute в контексте метания ошибок
у меня есть некоторая процедура, написанная в Oracle. К сожалению я не могу показать свой код. Где-то внутри него выбирается, где выполнение разбилось из-за отсутствия необходимых данных. Это выглядит так
select value into l_value
from config
where code = upper(p_code);
поэтому, когда я называю эту процедуру (в SqlDeveloper)
execute some_package.some_procedure('CODE');
он выдает
Error report -
ORA-01403: no data found
ORA-06512: at "XXXXXXXXXXXXXXXXXXX", line 111
ORA-06512: at "XXXXXXXXXXXXXXXXXXX", line 111
ORA-06512: at line 1
01403. 00000 - "no data found"
*Cause: No data was found from the objects.
*Action: There was no data from the objects which may be due to end of fetch.
но когда я называю это
call some_package.some_procedure('CODE');
он падает в том же месте (как я могу предположить из результата, хранящегося в БД), но он делает никаких исключений.
some_package.some_procedure('CODE') succeeded.
что происходит? И почему существует такая разница?
1 ответов
NO_DATA_FOUND
поведение исключения является особенным. Он обрабатывается по умолчанию в контексте SQL, но не в PL / SQL. В SQL никакие найденные данные не считаются ошибкой, все время происходит так, что нет данных, отвечающих определенному условию.
CALL
является командой SQL, тогда как EXEC
ярлык для BEGIN <code> END;
который является PL / SQL.