【问题标题】:oracle how to catch raise application errororacle如何捕获引发应用程序错误
【发布时间】:2021-02-06 07:12:17
【问题描述】:

如何为 raise_application_error 调用编写异常处理程序?我完全坚持下去。我知道如何提升和捕获自定义异常,但我不知道如何使用 raise_application_error 与其他 catch 块然后“当其他人”捕获错误。谢谢提示

【问题讨论】:

    标签: oracle plsql


    【解决方案1】:

    这样的?

    declare
        no_bananas_on_tuesday exception;
        pragma exception_init(no_bananas_on_tuesday, -20123);
    begin
        raise_application_error(-20123, 'Bananas are not available on a Tuesday');
    exception
        when no_bananas_on_tuesday then
            dbms_output.put_line('It''s Tuesday but user requested a banana.');
    end;
    
    1. 上面的调用会产生 ORA-20123 错误。
    2. 我们定义了一个自定义异常 no_bananas_on_tuesday 与代码 -20123 关联。
    3. 当 ORA-20123 异常发生时,我们可以使用 no_bananas_on_tuesday 异常处理程序来捕获它。

    【讨论】:

      【解决方案2】:

      你可以检查sqlcode在你的“当别人时”

      例如:

      create or replace function square( n number) return number is
      begin
        if n <= 10 then
          return n*n;
        else
          raise_application_error(-20001, 'too big');
        end if;
      end;
      
      
      declare
        myNumber number(10);
      begin
        myNumber := square(300);
        dbms_output.put_line(myNumber);
      exception
        when others then  
          if sqlcode=-20001 then
            dbms_output.put_line('beyond the limit '||sqlerrm);
          else
            dbms_output.put_line(sqlerrm);
          end if;
      end;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-29
        • 2019-03-22
        • 2015-04-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多