过程中带有PL / SQL中嵌套函数的异常处理

莫汉

我有一个如下所述的pl / sql过程

CREATE OR REPLACE PROCEDURE add_affectedCircle
(v_affected_circle IN v_circle.circle_code%type)
IS
    v_circle_id  NUMBER;

BEGIN
        v_circle_id := get_circleID(v_affected_circle);
        INSERT INTO vf_affected_circle (affected_circle) 
        values (v_circle_id);

EXCEPTION
WHEN OTHERS THEN
RAISE_APPLICATION_ERROR (-20101, 'Problem in loading Affected Circle data');
END;
/

首先,我使用函数get_circleID检查vf_circle表的circle_code列中的特定数据v_affected_circle,并返回与circle_code关联的circle_id。

CREATE OR REPLACE FUNCTION get_circleID 
( v_circle_code  vf_circle.circle_code%TYPE)
RETURN vf_circle.circle_id%TYPE
IS
    return_value  vf_circle.circle_id%TYPE; 
BEGIN
    BEGIN
        SELECT circle_id INTO return_value
        FROM vf_circle
        WHERE circle_code = v_circle_code;
   END;
   RETURN return_value;
EXCEPTION
WHEN NO_DATA_FOUND THEN
RAISE_APPLICATION_ERROR(-20102, 'Circle Code is wrong or not available');
END get_circleID;
/

当数据不可用于提供的数据v_affected_circle时,我打算函数get_circleID中引发用户异常(-20102,“圈子代码错误或与记录不同”)从过程add_affectedCircle中调用此函数

如果在将数据加载到特定表vf_affected_circle中时发生某些问题,我试图引发另一个用户异常(-20102,“加载受影响的圆数据中的问题”)

现在的问题是我尝试使用错误的值运行过程add_affectedCircle,我仅从过程而不是从函数获取异常。另外,我看到了其他无法处理和禁止的异常。

现在我越来越像这样的异常

BEGIN add_affectedCircle(69,'ODI:ASA'); END;

*
ERROR at line 1:
ORA-20102: Problem in loading Affected Circle data
ORA-06512: at "SRUSER.ADD_AFFECTEDCIRCLE", line 28
ORA-06512: at line 1

但是我需要证明的是这样

   ORA-20102: Circle Code is wrong or not available
   ORA-20101: Problem in loading Affected Circle data

我怎样才能做到这一点?

亚历克斯·普尔

RAISE_APPLICATION_ERROR过程具有第三个参数,该参数控制该异常是替换当前异常堆栈(默认行为)还是对其进行添加。

如果指定TRUE,则PL / SQL将error_code放在错误堆栈的顶部。否则,PL / SQL将错误堆栈替换为error_code。

因此,如果您通过它TRUE,它将同时显示两条消息;在您的过程调用中:

...
EXCEPTION
WHEN OTHERS THEN
RAISE_APPLICATION_ERROR (-20101, 'Problem in loading Affected Circle data',
  TRUE);
END;

给你输出:

BEGIN
*
ERROR at line 1:
ORA-20101: Problem in loading Affected Circle data
ORA-06512: at "SRUSER.ADD_AFFECTEDCIRCLE", line 13
ORA-20102: Circle Code is wrong or not available
ORA-06512: at line 2

只显示消息而不显示其他堆栈信息,您需要操纵堆栈。本文介绍了如何使用format_error_backtrace提取您感兴趣的信息的方法,但不幸的是,指向BT软件包的链接已失效。一些同样地,这里覆盖从本质上讲,您需要将异常字符串解析为几行,并且只显示以开头的代码ORA-20%

但是要小心丢失实际上可能至关重要的信息。特别是,我建议您只捕获要查找的特定错误,而不是OTHERS-别管它,这样您就可以处理意外的错误并且不要隐藏重要的内容。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

SQL:函数中的异常处理

来自分类Dev

MySQL ALTER TABLE在存储过程中带有参数

来自分类Dev

带有参数的存储过程中的多个 SELECT

来自分类Dev

Pl / SQL嵌套过程异常处理

来自分类Dev

从过程中调用表函数(PL SQL)

来自分类Dev

SQL-存储过程中带有参数的调用函数

来自分类Dev

PL/SQL 函数 Oracle 中未处理异常

来自分类Dev

如何在PL / SQL过程中重用SQL查询?

来自分类Dev

如何在嵌套函数和异常中处理None值

来自分类Dev

是否可以在PL SQL过程中创建本地视图?

来自分类Dev

如何在pl / sql过程中读取值?

来自分类Dev

在pl / sql过程中删除重复的子查询

来自分类Dev

过程中1行的PL / SQL更改值

来自分类Dev

在 pl/sql 过程中删除完整表:ORACLE

来自分类Dev

PL/SQL:如何在过程中接受输入

来自分类Dev

如何从带有PHP预准备语句的SQL Server存储过程中返回多个结果?

来自分类Dev

如何在带有多个参数的sql存储过程中传递数据表

来自分类Dev

MySQL 中带有日期参数的存储过程中的动态查询

来自分类Dev

处理来自 Oracle SQL Developer 中另一个过程中使用的函数的异常

来自分类Dev

在应用过程中带有点符号的熊猫列引用索引

来自分类Dev

在带有数据透视表的存储过程中返回空值

来自分类Dev

如何在存储过程中编写带有动态表名称的Select查询?

来自分类Dev

带有许多图像的 TensorFlow TFRecord 在读取过程中崩溃

来自分类Dev

PL / SQL:我有一个函数,但是有一个错误:“在过程中,RETURN不能包含表达式”

来自分类Dev

构造函数中的异常处理

来自分类Dev

带有返回语句的存储函数中的 MYSQL 异常处理

来自分类Dev

子过程中的raise_application_error异常处理

来自分类Dev

函数之间的PL \ SQL异常处理

来自分类Dev

(带有Oracle数据库的C#应用程序)在存储过程中返回参数

Related 相关文章

  1. 1

    SQL:函数中的异常处理

  2. 2

    MySQL ALTER TABLE在存储过程中带有参数

  3. 3

    带有参数的存储过程中的多个 SELECT

  4. 4

    Pl / SQL嵌套过程异常处理

  5. 5

    从过程中调用表函数(PL SQL)

  6. 6

    SQL-存储过程中带有参数的调用函数

  7. 7

    PL/SQL 函数 Oracle 中未处理异常

  8. 8

    如何在PL / SQL过程中重用SQL查询?

  9. 9

    如何在嵌套函数和异常中处理None值

  10. 10

    是否可以在PL SQL过程中创建本地视图?

  11. 11

    如何在pl / sql过程中读取值?

  12. 12

    在pl / sql过程中删除重复的子查询

  13. 13

    过程中1行的PL / SQL更改值

  14. 14

    在 pl/sql 过程中删除完整表:ORACLE

  15. 15

    PL/SQL:如何在过程中接受输入

  16. 16

    如何从带有PHP预准备语句的SQL Server存储过程中返回多个结果?

  17. 17

    如何在带有多个参数的sql存储过程中传递数据表

  18. 18

    MySQL 中带有日期参数的存储过程中的动态查询

  19. 19

    处理来自 Oracle SQL Developer 中另一个过程中使用的函数的异常

  20. 20

    在应用过程中带有点符号的熊猫列引用索引

  21. 21

    在带有数据透视表的存储过程中返回空值

  22. 22

    如何在存储过程中编写带有动态表名称的Select查询?

  23. 23

    带有许多图像的 TensorFlow TFRecord 在读取过程中崩溃

  24. 24

    PL / SQL:我有一个函数,但是有一个错误:“在过程中,RETURN不能包含表达式”

  25. 25

    构造函数中的异常处理

  26. 26

    带有返回语句的存储函数中的 MYSQL 异常处理

  27. 27

    子过程中的raise_application_error异常处理

  28. 28

    函数之间的PL \ SQL异常处理

  29. 29

    (带有Oracle数据库的C#应用程序)在存储过程中返回参数

热门标签

归档