首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >处理其他模式的源代码中的错误

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

Stack Overflow用户
提问于 2020-05-09 21:24:16
回答 1查看 24关注 0票数 0

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

EN

回答 1

Stack Overflow用户

发布于 2020-05-10 02:22:49

如果您只使用该函数并依赖于它返回的结果,请担心它是否会失败(好吧,谁说它会失败呢?)也许它是可靠的),那么对您来说这是个好消息:因为该函数在空间中并不是唯一的,所以您可以在自己的模式中创建一个包装器函数。您的函数将调用“原始”并处理可能的异常。

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

作为mike连接,我将创建返回错误的函数(并将其授予scott):

代码语言:javascript
复制
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连接并调用该函数;当然,它将失败:

代码语言:javascript
复制
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,它可能是最糟糕的异常处理程序;我建议您采取更聪明的方法,并在异常发生时进行处理)。

代码语言:javascript
复制
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>

啊哈!不再被零除错了!

看看有没有帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61697438

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档