【问题标题】:Difference between oracle call and execute in context of error throwing在抛出错误的上下文中,oracle 调用和执行之间的区别
【发布时间】:2016-03-09 11:00:30
【问题描述】:

我有一些用 Oracle 编写的程序。不幸的是我不能显示它的代码。它内部的某个地方选择了由于缺少所需数据而导致执行崩溃的地方。看起来是这样的

select value into l_value
        from config
       where code = upper(p_code);

所以当我这样调用这个过程时(在 SqlDeveloper 中)

execute some_package.some_procedure('CODE');

它抛出

Error report -
ORA-01403: no data found
ORA-06512: at "XXXXXXXXXXXXXXXXXXX", line 111
ORA-06512: at "XXXXXXXXXXXXXXXXXXX", line 111
ORA-06512: at line 1
01403. 00000 -  "no data found"
*Cause:    No data was found from the objects.
*Action:   There was no data from the objects which may be due to end of fetch.

但是当我这样称呼它时

call some_package.some_procedure('CODE');

它在同一个地方崩溃(我可以从结果中建议,存储在 DB 中),但它不会引发异常。

some_package.some_procedure('CODE') succeeded.

会发生什么?为什么会有这样的差异?

【问题讨论】:

    标签: sql database oracle plsql


    【解决方案1】:

    NO_DATA_FOUND 异常行为很特殊。它默认在 SQL 上下文中处理,但不在 PL/SQL 中处理。在 SQL 中找不到数据不被认为是错误,它一直发生在没有满足特定条件的数据的情况下。

    CALL 是 SQL 命令,而 EXECBEGIN <code> END; 的快捷方式,即 PL/SQL。

    【讨论】:

      猜你喜欢
      • 2020-09-26
      • 1970-01-01
      • 2011-03-01
      • 1970-01-01
      • 2011-11-21
      • 1970-01-01
      • 2014-02-03
      • 2011-08-07
      • 1970-01-01
      相关资源
      最近更新 更多