【问题标题】:Handling error in a source code of other schema处理其他模式的源代码中的错误
【发布时间】:2020-05-09 13:24:15
【问题描述】:

我有一个来自其他模式的 Oracle PL/SQL 函数的源代码,我无法更改它。报错怎么办?

【问题讨论】:

  • 这取决于你要处理什么错误?您能否详细说明异常的详细信息以及您想要处理的内容?
  • Yaa VN'sCorner ,实际上 plsql 中处理函数错误的技术解决方案是什么架构,我必须自己解决它,而不告诉他是谁创建的。固体我用插件请建议

标签: oracle function plsql stored-functions


【解决方案1】:

如果你只使用那个函数并且依赖于它返回的结果+担心它是否会失败(好吧,谁说它会失败?也许它是防故障的),那么好消息你:因为这个函数在空间中并不孤单,你可以在你自己的模式中创建一个 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>

啊哈!不再有除以零错误!


看看有没有帮助。

【讨论】:

  • 我想没有万无一失的解决方案,除非要处理的异常是用户定义的异常。
猜你喜欢
  • 1970-01-01
  • 2011-03-12
  • 2023-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多