【问题标题】:execution flow of program when encounter exception oracle PLSQL遇到异常oracle PLSQL时程序的执行流程
【发布时间】:2019-11-16 07:56:20
【问题描述】:

当我们遇到异常时,指针会移动到异常部分,如果异常被处理,指针会返回或移动到下一部分。?????

案例一:系统定义异常

案例 2:用户定义的异常

DECLARE
    var_dividend   NUMBER := 24;
    var_divisor    NUMBER := 0;
    var_result     NUMBER;
    exception_div_zero EXCEPTION;
BEGIN
    IF  var_divisor = 0
    THEN
        RAISE exception_div_zero;
    END IF;

    var_result := var_dividend / var_divisor;

    dbms_output.put_line(var_result);

EXCEPTION
    WHEN exception_div_zero THEN
        dbms_output.put_line(var_result);
END;

我想知道什么时候遇到异常 执行异常部分后,指针将返回到下一条语句,或者它只是存在程序。??在这里输入代码

【问题讨论】:

标签: sql oracle exception plsql plsqldeveloper


【解决方案1】:

来自 Oracle docs -

异常处理程序运行后,控制转移到封闭块的下一条语句。如果没有封闭块,则:

如果异常处理程序在子程序中,则在调用后的语句处将控制权返回给调用者。

如果异常处理程序位于匿名块中,则控制转移到主机环境(例如,SQL*Plus)

【讨论】:

    【解决方案2】:

    不,你不会回到你所在的地方。而是代码在异常处理之后继续运行。

    看看这个测试:

    begin
      dbms_output.put_line('One');
    
      <<inner_one>>
      begin
        raise no_data_found;
        dbms_output.put_line('Two');
      exception
        when no_data_found then
          dbms_output.put_line('Three');
      end inner_one;
    
      dbms_output.put_line('Four');
    
      raise no_data_found;
    
      dbms_output.put_line('Five');
    
    exception
      when no_data_found then
        dbms_output.put_line('Six');
    end;
    

    输出是:

    One
    Three
    Four
    Six
    

    所以 Oracle 的 Try / Catch 版本是在您的块中使用匿名块。你可以嵌套块 255 次,这是很多..

    使用子块解析日期字符串的示例,如果失败,则使用当前日期/时间。:

    declare
      l_date date;
    begin
      -- some code
      -- parse date
      begin
        l_date := to_date(:input1, 'yyyy-mm-dd hh24:mi:ss');
      exception
        when others then
          l_date := sysdate;
      end;
    
      --some more code
    end;
    

    问候 奥拉弗

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-13
      相关资源
      最近更新 更多