处理其他架构的源代码中的错误



我有一个来自其他模式的Oracle PL/SQL函数的源代码,我无法更改它。如果它抛出错误,我该如何处理?

如果你只使用该函数,并依赖于它返回的结果+担心它是否会失败(好吧,谁说会失败?也许它是防故障的(,那么对你来说是个好消息:由于该函数在空间中并不孤单,你可以在自己的模式中创建一个包装器函数。您的函数将调用"原始"并处理可能的异常。

这里有一个简单的例子,只是为了说明我的意思。

作为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

好吧,让我们创建包装器函数,看看它的行为(我将使用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>

啊哈!不再出现除以零错误!


看看是否有帮助。

最新更新