其他模式的源代码中的处理错误

问题描述 投票:0回答:1

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

oracle function plsql stored-functions
1个回答
0
投票

如果仅使用该函数并根据结果返回+,则担心它是否会失败(嗯,是谁说的?也许是防故障的),所以对您来说是个好消息:函数在空间中并不孤单,您可以在自己的模式中创建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>

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


看看是否有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.