Почему бы вам не добавить параметр в функцию, чтобы указать, следует ли генерировать исключение / возвращать ноль?Когда вы вызываете функцию, вы можете выбрать нужное вам поведение.
create or replace function do_something(p_parameter1 < some_type >
,p_raise_exception varchar2 default 'Y') return < sometype > is
begin
--.. calculating .. .
return result;
exception
when others then
if p_raise_exception is 'Y'
then
raise;
else
return null;
end if;
end;
В качестве альтернативы owa_util предоставляет некоторые функции, которые вы можете использовать.
create or replace function do_something(p_parameter1 < some_type >) return < sometype > is
l_owner varchar2(100);
l_name varchar2(100);
l_lineno number;
l_caller_t varchar2(100);
begin
--.. calculating .. .
return result;
exception
when others then
owa_util.who_called_me(l_owner, l_name, l_lineno, l_caller_t)
-- who called me result seems empty when called from sql.
if l_owner is not null
then
raise;
else
return null;
end if;
end;
Конечно: Скрытие всехошибки - плохая практика