PL/SQL提供了良好的异常处理机制,当程序运行出现错误时就会触发异常。异常被触发时,程序执行即终止,在PL/SQL块中提供了异常处理的部分,从而可以捕获一个异常进行特殊处理。
严格意义上来讲,一个完整的PL/SQL块应该具有以下结构:
declare --declare variables begin --execute & exception raised exception --handle exception end;
oracle数据库预先定义了一系列异常,以下是常见的一些:
ACCESS_INTO_NULL(ORA-06530):引用对象类型变量的属性时,未对变量进行初始化;
CASE_NOT_FOUND(ORA-06592):使用case-when结构时,未使用else子句,并且处理了不包含的case条件;
COLLECTION_IS_NULL(ORA-06531):引用集合类型元素时,未对集合类型变量初始化;
CURSOR_ALREADY_OPEN(ORA-06511):使用open命令打开已经处于打开状态的显式游标;
DUL_VAL_ON_INDEX(ORA-00001):在唯一约束的列上插入重复的值时会触发;
INVALID_NUMBER(ORA-01722):不能将字符转换为合理的数字时会触发;
NO_DATA_FOUND(ORA-01403):select语句未返回行或引用未初始化的索引表元素;
TOO_MANY_ROWS(ORA-01422):select into时,返回数据超过一行时即被触发;
ZERO_DEVIDE(ORA-01476):除0异常;
SUBSCRIPT_BEYOUND_COUNT(ORA-06533):使用数组类型是,下标超出元素范围;
SUBSCRIPT_OUTSIDE_LIMIT(ORA-06532):使用嵌套表或Varry元素时,使用了负数作为下标;
VALUE_ERROR(ORA-06502):赋值操作时,变量长度不足以容纳实际数据长度
ROWTYPE_MISMATCH(ORA-06504):位游标变量赋值时,返回类型与游标定义类型不一致
除这些异常之外,开发者也可以进行自定义异常,并自定义处理规则。自定义异常的处理步骤如下:
1.在declare部分定义一个异常变量;
2.在begin处理中使用raise抛出一个异常;
3.在exception部分进行处理
其中,使用SQLCODE,SQLERRM这两个函数可以查看错误号和对应的错误消息;
RAISE_APPLICATION_ERROR(ERR_NUMBER,ERR_MSG,[TRUE|FALSE]):
该语法用于自定义错误消息,err_number必须在-20000到-20999之间,err_msg指定错误消息,长度不能超过2048字节,第三个值用于控制错误堆栈信息的存放内容,默认为false,即触发时会替换之前所有的错误,指定为true时会将这次的错误存放在错误堆栈中。只能在过程、函数、触发器、包中使用,不能在匿名块或子程序中使用;
使用以下代码建立存储过程,用于触发一个自定义错误消息的异常:
create or replace procedure comm_r( eno number,comm number) is v_comm emp.comm%type; begin select comm into v_comm from emp where empno=eno; if v_comm is null then raise_application_error(-20001,'This guy has no comm!'); end if; exception when no_data_found then dbms_output.put_line('No such emp exists'); end;
使用以下命令调用,得到结果如下:
SQL> exec comm_r(7788,100); begin comm_r(7788,100); end; ORA-20001: This guy has no comm! ORA-06512: 在 "SCOTT.COMM_R", line 8 ORA-06512: 在 line 1
相关推荐
ORACLE PL/SQL异常处理.有关于异常处理的3个知识点!
PL/SQL 程序设计 本章主要重点: PL/SQL概述 PL/SQL块结构 PL/SQL流程 运算符和表达式 游标 异常处理 数据库存储过程和函数 包 触发器
探讨了数据类型、条件控制语句和顺序控制语句、循环、异常处理、安全特性、全球化和本地化问题, 以及PL/SQL架构。 ? 通过使用过程、函数、触发器和包,建立模块化的PL/SQL应用。 内容推荐 《Oracle PL/SQL程序...
文档目录内容如下: Oracle PL/SQL语言初级教程 1 目录 1 1.PL/SQL语言基础 3 过程 5 包(package) 6 变量和常量 6 执行部分 10 控制结构 12 ...9.PL/SQL异常处理初步 88 异常传播 91 常用异常处理方法 93
<br>PL/SQL完善器——该完善器允许您通过用户定义的规则对SQL和PL/SQL代码进行规范化处理。在编译、保存、打开一个文件时,代码将自动被规范化。该特性提高了您编码的生产力,改善了PL/SQL代码的可读性,促进了...
第6章 异常处理 118 第3部分 pl/sql数据 第7章 使用数据 159 第8章 字符串 182 第9章 数字 221 第10章 日期和时间戳 255 第11章 记录类型 297 第12章 集合 313 第13章 其他数据类型...
异常处理(第8~10章) 游标(第11~12章) 触发器(第13~14章) 复合数据类型(第15~16章) 动态SQL(第17章) 批量SQL(第18章) 子程序和包(第19~22章) Oracle中对象类型(第23章) Oracle提供的包(第24章)
<br>PL/SQL完善器——该完善器允许您通过用户定义的规则对SQL和PL/SQL代码进行规范化处理。在编译、保存、打开一个文件时,代码将自动被规范化。该特性提高了您编码的生产力,改善了PL/SQL代码的可读性,促进了...
与其他语言相同,变量在使用之前必须声明,PL/SQL提供了独立的专门用于处理异常的部分,下面描述了PL/SQL块的不同部分: 声明部分(Declaration section) 声明部分包含了变量和常量的数据类型和初始值。这个...
异常处理 数据库存储过程和函数 包 触发器 §1.2 SQL与PL/SQL §1.2.1 什么是PL/SQL? PL/SQL是 Procedure Language & Structured Query Language 的缩写。ORACLE的SQL是支持ANSI(American national Standards ...
第16章 异常处理 . 第17章 本地动态sql 第18章 pl/sql过程 第19章 pl/sql函数 第20章 pl/sql包 第21章 触发器 第22章 使用对象类型 第四部分 pl/sql系统包 第23章 使用大对象 第24章 读写os文件 ...
探讨了数据类型、条件控制语句和顺序控制语句、循环、异常处理、安全特性、全球化和本地化问题, 以及PL/SQL架构。 ? 通过使用过程、函数、触发器和包,建立模块化的PL/SQL应用。 内容推荐 《Oracle PL/SQL程序...
第16章异常处理 . 第17章本地动态SQL 第18章PL/SQL过程 第19章PL/SQL函数 第20章PL/SQL包 第21章触发器 第22章使用对象类型 第四部分PL/SQL系统包 第23章使用大对象 第24章读写OS文件 第25章开发...
PL/SQL完善器——该完善器允许您通过用户定义的规则对SQL和PL/SQL代码进行规范化处理。在编译、保存、打开一个文件时,代码将自动被规范化。该特性提高了您编码的生产力,改善了PL/SQL代码的可读性,促进了大规模...
PL/SQL程序都是以块(block)为基本单位,整个PL/SQL块分三部分:声明部分(用declare开头)、执行部分(以 begin开头)和异常处理部分(以exception开头)。其中执行部分是必须的,其他两个部分可选。无论PL/SQL...
该完善器允许您通过用户定义的规则对SQL和PL/SQL代码进行规范化处理。在编译、保存、打开一个文件时,代码将自动被规范化。该特性提高了您编码的生产力,改善了PL/SQL代码的可读性,促进了大规模工作团队的协作。 ...
Oracle 异常处理。即使是写得最好的PL/SQL程序也会遇到错误或未预料到的事件。一个优秀的程序都应该能够正确处理各种...当然了,PL/SQL编译错误不能通过PL/SQL异常处理来处理,因为这些错误发生在PL/SQL程序执行之前。
PL/SQL语言的简介 程序结构 流程控制 异常处理 过程与函数 游标 程序包 触发器
程序结构 PL/SQL程序都是以块(block)为基本单位,整个PL/SQL块分三部分:声明部分(用declare开头)、执行部分(以 begin开头)和异常处理部分(以exception开头)。其中执行部分是必须的,其他两个部分可选。...