我有Oracle PL/SQL中来自其他模式的函数的源代码,我不能更改它。如果抛出错误,我该如何处理?
发布于 2020-05-10 02:22:49
如果您只使用该函数并依赖于它返回的结果,请担心它是否会失败(好吧,谁说它会失败呢?)也许它是可靠的),那么对您来说这是个好消息:因为该函数在空间中并不是唯一的,所以您可以在自己的模式中创建一个包装器函数。您的函数将调用“原始”并处理可能的异常。
这里有一个简单的例子,只是为了说明我的意思。
作为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>啊哈!不再被零除错了!
看看有没有帮助。
https://stackoverflow.com/questions/61697438
复制相似问题