我具有来自其他架构的Oracle PL / SQL中的函数的源代码,无法更改它。如果抛出错误,我该如何处理?
如果仅使用该函数并根据结果返回+,则担心它是否会失败(嗯,是谁说的?也许是防故障的),所以对您来说是个好消息:函数在空间中并不孤单,您可以在自己的模式中创建wrapper函数。您的函数将调用“原始”并处理可能的异常。
这是一个简单的例子,只是为了说明我的意思。
连接为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>
啊哈!不再出现除以零错误!
看看是否有帮助。