Обработка ошибки в исходном коде другой схемы - PullRequest
0 голосов
/ 09 мая 2020

У меня есть исходный код функции в Oracle PL / SQL из другой схемы, и я не могу его изменить. Как я могу справиться с этим, если он выдает ошибку?

1 Ответ

0 голосов
/ 09 мая 2020

Если вы используете только эту функцию и зависите от результата, который она возвращает + , беспокойтесь, не выйдет ли она из строя (ну, кто сказал, что это произойдет? Может быть, это надежно), тогда хорошие новости для вас : поскольку эта функция не одна в космосе, вы можете создать функцию обертку в своей собственной схеме. Ваша функция будет вызывать «оригинал» и обрабатывать возможные исключения.

Вот простой пример, чтобы проиллюстрировать, что я имею в виду.

Подключен как mike, я создам функцию, которая возвращает ошибку (и передаю ее scott):

SQL> connect mike/lion
Connected.
SQL> create or replace function f_fail return number as
  2  begin
  3    return 1/0;
  4  end;
  5  /

Function created.

SQL> select f_fail from dual;
select f_fail from dual
       *
ERROR at line 1:
ORA-01476: divisor is equal to zero
ORA-06512: at "MIKE.F_FAIL", line 3


SQL> grant execute on f_fail to scott;

Grant succeeded.

Подключитесь как scott и вызовите эту функцию; конечно, это не удастся:

SQL> connect scott/tiger
Connected.
SQL> select mike.f_fail from dual;
select mike.f_fail from dual
       *
ERROR at line 1:
ORA-01476: divisor is equal to zero
ORA-06512: at "MIKE.F_FAIL", line 3

Хорошо, давайте создадим функцию wrapper и посмотрим, как она себя ведет (я буду использовать when others, который, вероятно, является худшим обработчиком исключений ; Я бы посоветовал вам использовать более разумный подход и обрабатывать исключения по мере их возникновения).

SQL> create or replace function f_wrapper return number as
  2  begin
  3    return mike.f_fail;
  4  exception
  5    when others then
  6      return 0;
  7  end;
  8  /

Function created.

SQL> select f_wrapper from dual;

 F_WRAPPER
----------
         0

SQL>

Ага! Больше не нужно деление на ноль ошибка!


Посмотрим, поможет ли.

...