PL/SQL系统定义的异常的操作实例

程序执行过程中出现错误情况被称为在pl/sql异常。 pl/sql支持程序员在程序中使用异常块捕获这样的条件并采取适当的动作应对错误情况。有两种类型的异常:定义的异常、用户定义的异常

异常处理语法

一般异常处理的语法如下。在这里可以列出下来很多,要处理异常。默认的异常将使用when others then处理:

declare
   
begin
   
exception
   
   when exception1 then 
       exception1-handling-statements 
   when exception2  then 
      exception2-handling-statements 
   when exception3 then 
      exception3-handling-statements
   ........
   when others then
      exception3-handling-statements
end;

预定义异常

pl/sql提供许多预先定义的异常,这是在被执行时的任何规则由程序引发。例如,预定义异常no_data_found时引发一个select into语句返回数据行。下表列出了一些重要的预先定义的异常:

操作实例一 除以零的操作异常:

-- created on 2018/4/2 by e.wang 
/*
默认的异常将使用when others then处理:

declare
   
begin
   
exception
   
   when exception1 then 
       exception1-handling-statements 
   when exception2  then 
      exception2-handling-statements 
   when exception3 then 
      exception3-handling-statements
   ........
   when others then
      exception3-handling-statements
end;

*/
declare 
  --定义一个简单的变量
  i integer;
begin
  -- 
  i:=30;
  --当没有任何选择,在当选择一个case语句的子句,并且没有else子句时被引发
  case 
     when i=35 then dbms_output.put_line('it is right!'); 
     --它被引发当一个数试图除以零。
     when i/0=0 then dbms_output.put_line('condition is error');
  end case;
  
  --异常获取代码块
  exception   
     when case_not_found then 
           dbms_output.put_line('no case substate!');
     --它被引发当一个数试图除以零
     when zero_divide then 
           dbms_output.put_line('zero is not pided!');      
           
end;

操作实例一运行结果截图:

操作实例二 引发异常:

-- created on 2018/4/2 by e.wang 
/*
异常是数据库服务器自动在内部数据库错误,但异常可以明确地提出由程序员使用命令raise。
以下是引发异常的简单的语法:

declare
   exception_name exception;
begin
   if condition then
      raise exception_name;
   end if;
exception
   when exception_name then
   statement;
end;
可以在引发oracle的标准异常或任何用户定义的异常使用上述语法。
*/
declare 
  --定义一个简单的变量
  i integer;
begin
  -- 
  i:=30;
  --它被引发当一个数试图除以零。
  if i/0=0 then
     raise zero_divide;
  end if;
     
  --异常获取代码块
  exception   
     --它被引发当一个数试图除以零
     when zero_divide then 
           dbms_output.put_line('zero is not pided!');      
           
end;

窗口二结果截图:

(0)
上一篇 2022年3月21日
下一篇 2022年3月21日

相关推荐