`

plsql异常处理

阅读更多

一、异常

   (1) 程序错误

   - 编译时

   - 运行时

   (2)异常

   - 处理运行时错误

  .PL/SQL是如何处理异常的?

   -  错误引发异常

   -  每当引发异常时,都将控制权传递给异常处理程序

   -  异常处理程序处理异常

  .异常中涉及的步骤

   -  声明异常

   -  引发异常

   -  处理异常

  .异常的类型

   -  预定义的异常   --由Oracle服务器维护异常

   -  非预定义的异常 又称'用户定义异常'

  1、预定义异常

   由Oracle为常见错误预定义

   在DBMS_Standard程序包中提供了这些定义

   不需要显式声明

declare
   empJob emp.job%type;
begin
  select job into empjob from emp where empno=0000;
  DBMS_output.put_line('Employee job is '||emjob);
Exception
  when No_data_found then
     DBMS_output.put_line('错误了,查询没有返回行');
  when too_many_rows then
     DBMS_output.put_line('错误了,查询返回了多条数据');
  when zero_divide  then
     DBMS_output.put_line('错误了,除数不能为零');
  when others then  --一定是最后一个处理的代码
      DBMS_output.put_line('错误了,未知的错误信息');
end;

 

2、非预定义异常

   无法预知的错误,如网络不通、服务没有启动、或其他错误,这样的异常需要用户要定义

declare
   PK_conflict Exception;  --用户定义异常
   iCount int:=0;
begin
   select count(*) into iCount from emp where empno='7369'
   if iCount>0 then
       raise   Dup_Value;  --引发异常
   end if;
Exception
    when PK_conflict  then   --处理异常
      DBMS_output.put_line('表中已经有这条记录了');
end;
/

 

以上代码的问题是,只有条件满足 才会引发异常,否则永远都不会执行此句.

  并且当有多个语句都有可能会引发此异常时,代码就过于冗余.并且都要显示

  的引发异常,能不能让系统帮我们维护自定义异常了,当有异常引发时 自动

  通知Oracle服务器处理异常

  3、pragma指令

declare
   PK_conflict Exception;  --用户定义异常
   pragma  Exception_init(PK_conflict -1);  --编译指令 可以把异常捆绑到Oracle 并覆盖预定义的异常 
   iCount int:=0;                                     这里的-1 代表主键冲突
begin
   insert into emp(empno,ename) values('7369','FeiYang');
Exception
    when PK_conflict then   --处理异常
      DBMS_output.put_line('表中已经有这条记录了,主键冲突');
end;

 

为了给用户友好的错误提示.用此函数可以定义友好的提示。

DBMS_output.put_line()函数只有sqlPlus 客户端支持.
Raise_Application_Error 
  .用于创建用户定义的错误消息的过程
  .可以再执行部分和异常部分使用
  .必须介于 -20000 和 -20999之间
  .可以存储2M的错误信息
declare
   PK_conflict Exception;  --用户定义异常
   pragma  Exception_init(PK_conflict -1);  --编译指令
   iCount int:=0;
begin
   insert into emp(empno,ename) values('7369','FeiYang');
Exception
    when PK_conflict then   --处理异常
      Raise_Application_Error(-20001,'表中已经有这条记录了'); --注意参数的前后顺序
end;

 

常见系统异常参考表:

1命名的系统异常               产生原因 
 2 access_into_null            未定义对象 
 3 CASE_NOT_FOUND           CASE 中若未包含相应的 WHEN ,并且没有设置 ELSE 时 
 4 COLLECTION_IS_NULL        集合元素未初始化 
 5 CURSER_ALREADY_OPEN        游标已经打开 
 6 DUP_VAL_ON_INDEX         唯一索引对应的列上有重复的值 
 7 INVALID_CURSOR           在不合法的游标上进行操作 
 8 INVALID_NUMBER           内嵌的 SQL 语句不能将字符转换为数字 
 9 NO_DATA_FOUND           使用 select into 未返回行,或应用索引表未初始化的元素时 
10 TOO_MANY_ROWS           执行 select into 时,结果集超过一行 
11 ZERO_DIVIDE             除数为 0 
12 SUBSCRIPT_BEYOND_COUNT      元素下标超过嵌套表或 VARRAY 的最大值 
13 SUBSCRIPT_OUTSIDE_LIMIT        使用嵌套表或 VARRAY 时,将下标指定为负数 
14 VALUE_ERROR             赋值时,变量长度不足以容纳实际数据 
15 LOGIN_DENIED             应用程序连接到 oracle 数据库时,提供了不正确的用户名或密码 
16 NOT_LOGGED_ON            PL/SQL 应用程序在没有连接 oralce 数据库的情况下访问数据 
17 PROGRAM_ERROR           PL/SQL 内部问题,可能需要重装数据字典& pl./SQL 系统包 
18 ROWTYPE_MISMATCH         宿主游标变量与 PL/SQL 游标变量的返回类型不兼容 
19 SELF_IS_NULL             使用对象类型时,在 null 对象上调用对象方法 
20 STORAGE_ERROR            运行 PL/SQL 时,超出内存空间 
21 SYS_INVALID_ID            无效的 ROWID 字符串 
22 TIMEOUT_ON_RESOURCE       Oracle 在等待资源时超时 

 

分享到:
评论

相关推荐

    PLSQL总结 3异常处理及嵌套块.pdf

    PLSQL 异常处理及嵌套块 PLSQL 中的异常处理是一个非常重要的概念,它可以帮助开发者更好地处理代码中的错误,从而提高程序的稳定性和可靠性。本文将对 PLSQL 异常处理进行详细的介绍,包括什么是异常、异常处理...

    plsql&&oracle

    5. PLSQL异常处理: PLSQL的异常处理机制允许开发者预定义或自定义异常,并通过BEGIN...EXCEPTION...END结构来捕获和处理异常。这有助于提高程序的健壮性,确保在出现错误时能够优雅地处理。 6. PLSQL的游标: 游标...

    PLSQL语言初级教程

    5. **PLSQL异常处理** - **异常处理结构**:使用BEGIN...EXCEPTION部分来捕获和处理运行时错误。 - **预定义异常**:例如NO_DATA_FOUND、TOO_MANY_ROWS等,针对特定的数据库操作错误。 - **自定义异常**:创建...

    Oracle+PLSQL+语法手册 全面 详细 chm

    六、PLSQL异常处理 异常处理是PLSQL中非常重要的一部分,可以捕获和处理运行时错误。如使用EXCEPTION关键字定义异常处理块,捕获诸如NO_DATA_FOUND、TOO_MANY_ROWS等预定义异常,或者自定义异常。 七、PLSQL性能...

    plsql异常错误处理PPT教案.pptx

    plsql异常错误处理PPT教案.pptx

    基于oracle数据库的PLSQL编程以及存储过程的创建和使用资料.zip

    4. **PLSQL异常处理**: - 使用BEGIN...EXCEPTION...END结构来捕获和处理异常。 - 自定义异常可以使用RAISE语句抛出。 5. **存储过程**: - 存储过程是预编译的PLSQL代码块,存储在数据库中,可被多次调用。 - ...

    福建省电力公司oracle培训教材--PLSQL之游标与异常处理

    福建省电力公司oracle培训教材--PLSQL之游标与异常处理

    plsql资料--plsql资料

    这个压缩包“plsql.rar”包含了多个文档,详细讲述了PLSQL的相关知识点,包括其书写规则、语法、存储过程以及异常处理。 1. **PLSQL的书写及语法**: PLSQL的基本结构包括声明部分(DECLARE)、执行部分(BEGIN......

    PLSQL电子书小合集

    PLSQL的主要组成部分包括声明部分、执行部分和异常处理部分。在声明部分,你可以定义变量、常量、游标、过程和函数等;执行部分则包含SQL语句和PLSQL控制结构,如循环、条件判断等;异常处理部分帮助我们捕获和处理...

    PLSQL7.1经典版本

    6. **异常处理**:PLSQL的异常处理机制允许在程序中捕获并处理运行时错误。通过EXCEPTION关键字,可以定义特定的异常处理块,以优雅地处理错误,而不是让程序意外终止。 7. **游标**:游标用于在结果集中逐行处理...

    PLSQL 个人自学总结

    PLSQL由三个主要部分组成:声明部分、执行部分和异常处理部分。声明部分用于定义变量、常量、游标和过程;执行部分是实际执行的代码,包括SQL语句和PLSQL语句;异常处理部分则用于捕获和处理运行时可能出现的错误。 ...

    PLSQL 操作学习文档

    5. **异常处理**:学习PLSQL中的异常处理机制,如TRY-CATCH块,用于捕获和处理运行时错误,提高程序的健壮性。 6. **PLSQL Developer IDE的使用**:熟悉IDE的各项功能,如代码编辑器、调试器、对象浏览器、数据查看...

    PLSQL简易教程学过以后plsql不愁

    命名程序块可以出现在其他 PLSQL 程序块的声明部分,这方面比较明显的是子程序,子程序可以在执行部分引用,也可以在异常处理部分引用。 PLSQL 程序块可背独立编译并存储在数据库中,任何与数据库相连接的应用程序...

    PLSQL高级编程-结构化编程

    PLSQL由三部分组成:声明部分(DECLARE)、执行部分(BEGIN...END)和异常处理部分(EXCEPTION)。在声明部分,我们定义变量、游标、常量和子程序。执行部分是PLSQL的主要工作区,用于编写业务逻辑。异常处理部分则...

    《Oracle PLSQL 从入门到精通》.zip

    PLSQL还提供了异常处理机制,通过EXCEPTION关键字定义异常处理块,可以捕获并处理如 division_by_zero(除以零)、too_many_rows(多行结果)或no_data_found(无数据找到)等常见数据库异常。 学习Oracle PLSQL的...

    PLSQL操作ORALCE数据库

    PLSQL程序由块组成,包括声明部分、执行部分和异常处理部分。声明部分用于定义变量、常量、游标和子程序;执行部分包含SQL语句和PLSQL语句,用于执行实际操作;异常处理部分则用于捕获和处理运行时错误。 二、变量...

    plsql工具很好用

    PLSQL的主要组成部分包括声明部分(Declarations)、执行部分(Executable Section)和异常处理部分(Exception Handling)。在声明部分,你可以定义变量、游标、常量、记录类型等;执行部分则是编写SQL语句和过程化...

    PLSQL应用程序开发

    - **异常处理**:PLSQL提供了强大的异常处理机制,允许开发者定义并处理预定义或自定义的异常。 - **可重用的代码组件**:如包(`PACKAGES`)、函数(`FUNCTIONS`)、过程(`PROCEDURES`)、触发器(`TRIGGERS`)等...

    PLSQL程序设计

    PLSQL由三部分组成:声明部分(DECLARATION)、执行部分(EXECUTION)和异常处理部分(EXCEPTION HANDLING)。声明部分用于定义变量、常量、游标、记录类型等;执行部分包含SQL语句和PLSQL控制结构;异常处理部分则...

    PLSQL数据库应用

    1. **PLSQL基本语法**:PLSQL由声明部分、执行部分和异常处理部分组成。声明部分定义变量、常量、游标等;执行部分包含SQL语句和PLSQL语句;异常处理部分用于捕获和处理运行时错误。 2. **PLSQL块**:包括匿名块、...

Global site tag (gtag.js) - Google Analytics