PLSQL存储过程中异常的传递

本文详细介绍了PL/SQL中的异常处理原则,包括单个和嵌套存储过程的异常处理示例,以及如何在多层嵌套中使用自定义异常来追踪和记录错误。重点讨论了异常的传递机制和如何确保内部过程错误的可见性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.PLSQL异常处理的几个原则

  

  • 异常是指程序在编译时不能被发现,而在运行时出现的错误,异常处理可以使程序正常结束 ,并且可以灵活指定异常处理动作。

  • 异常的作用域是本异常所覆盖的语句块或部分语句块,对于嵌套的语句块,外部定义的异常适用于处理所有内部块中所匹配出现的异常;

  • 异常出现后,在块中直接跳到异常处理部分,出现异常问题的后面非异常处理语句不会获得执行;

  • 嵌套块中,内部块已处理过异常后,不会再传递进入外部块中处理,在内部块执行完成跳出内部块后,内部块外面外部块的语句仍按顺序执行,不会直接跳到外部块异常页结束块;

  • 嵌套块中,内部块未进行异常处理时,会将异常往外层块传递,如果外层块中可以捕获到对应异常,则由外部块处理异常。

2. 栗子

2.1 单个存储过程

   创建类似测试过程:

CREATE OR REPLACE PROCEDURE TEST_INNER_EXCEPTION
   (O_CODE OUT NUMBER,
    O_NOTE OUT VARCHAR2
    )
    
 IS 
 
 V_RESULT  NUMBER;
 BEGIN
   O_CODE := 1;
   O_NOTE :='SUCCESS';
   
   SELECT 1/0 INTO V_RESULT FROM  DUAL;
   
   DBMS_OUTPUT.PUT_LINE('异常后是否执行');
   
 EXCEPTION
   WHEN OTHERS THEN 
   O_CODE :=-1;
   O_NOTE :='Failure: '||SQLERRM;
 END ;

数据库单步测试该过程,将会看到执行到1/0时会发生除零运行时异常,触发ORACLE内置OTHERS异常后,直接跳到EXCEPTION ,执行此异常后的语句,而不会执行发生异常后正常块语句:DMBS_OUTPUT.PUT_LINE打印语句:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值