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
相关推荐
3. **PL/SQL异常处理** - **异常**:程序运行时的错误,如 divide_by_zero、no_data_found 等。 - **EXCEPTION块**:用于捕获和处理异常,可以定义自定义异常并使用RAISE语句抛出。 4. **PL/SQL与SQL的交互** - ...
3. **异常处理**:在PL/SQL中,异常处理是通过EXCEPTION关键字实现的,用于捕获并处理运行时错误。手册会详细解释如何定义和使用预定义及自定义异常。 4. **数据库操作**:PL/SQL与Oracle数据库紧密集成,可以执行...
1. **编程能力**:PL/SQL允许编写包含控制结构(如循环、条件语句)和异常处理的程序块,这些块可以存储在数据库中并按需调用,提高了数据库应用的灵活性和复杂性。 2. **数据处理**:通过PL/SQL,用户可以直接对...
ORACLE PL/SQL异常处理.有关于异常处理的3个知识点!
在Oracle数据库中,PL/SQL提供了丰富的控制结构,如循环、条件判断,以及异常处理机制,使得开发者能够编写复杂的业务逻辑。例如,`IF...THEN...ELSIF...ELSE`语句用于实现条件分支,`WHILE`和`FOR`循环则可以处理...
1. **基本语法**:PL/SQL由声明部分、执行部分和异常处理部分组成。声明部分用于定义变量、游标、常量等;执行部分包含SQL语句和PL/SQL控制结构,如循环、条件判断等;异常处理部分用于捕获和处理程序运行时可能出现...
PL/SQL 异常处理是 PL/SQL 中的一种机制,用于处理程序中的异常。PL/SQL 提供了多种异常处理机制,例如使用 EXCEPTION 语句、RAISE 语句等。 二十、常用预定义异常 PL/SQL 提供了多种预定义异常,例如 ZERO_DIVIDE...
ORACLE PL/SQL是从入门到精通的专业知识,涵盖了数据库开发与管理的多个方面,包括触发器、过程、函数、软件包、异常处理、游标、循环、分支、变量使用、数据库安装等关键知识点。 触发器是数据库中用来保证数据...
PL/SQL是Oracle数据库的内置编程语言,由块构成,包括声明部分、执行部分和异常处理部分。块可以是匿名块(即直接在SQL*Plus或其他工具中编写的一次性执行的代码),也可以是存储过程、函数、触发器、包等可重用的...
PL/SQL的结构通常包括声明部分、执行部分和异常处理部分。声明部分用于定义变量、常量和游标;执行部分是程序的主要逻辑,包含SQL语句和PL/SQL语句;异常处理部分则用于捕获和处理运行时可能出现的错误。 在实际...
- **块结构**:PL/SQL程序通常被组织成块,每个块由声明部分、执行部分和异常处理部分组成。 - **子程序**:包括存储过程和函数。这些子程序可以被其他PL/SQL代码调用,实现代码复用和模块化。 - **包**:包是一种...
5. **异常处理**:PL/SQL提供了异常处理机制,通过BEGIN...EXCEPTION块来捕获和处理运行时错误,如NO_DATA_FOUND、TOO_MANY_ROWS和OTHERS。 6. **包(PACKAGE)**:包是将相关的常量、变量、过程和函数组合在一起的...
PL/SQL全称为“Procedural Language/Structured Query Language”,它提供了丰富的控制结构和异常处理机制,使得开发者能够编写复杂的数据库操作程序。 **PL/SQL的特点** 1. **集成性**:PL/SQL与Oracle数据库紧密...
六、PL/SQL异常处理 异常处理是PL/SQL的一个重要特性,允许程序优雅地处理运行时错误。通过使用BEGIN...EXCEPTION...END结构,可以捕获并处理不同类型的异常,从而增强程序的健壮性。 七、PL/SQL与Oracle数据库的...
6. **异常处理**:PL/SQL提供了一个强大的异常处理机制,允许你定义和捕获运行时错误,从而编写健壮的代码。 7. **游标 FOR 循环**:这是一种简化版的游标使用,可以方便地遍历查询结果集,无需显式打开、提取和...
- **异常处理部分**:用于处理程序执行过程中可能出现的错误。 PL/SQL块的基本结构如下: ```sql DECLARE -- 声明部分 BEGIN -- 执行部分 EXCEPTION -- 异常处理部分 END; ``` **2.2 PL/SQL块分类** 根据其...
六、PL/SQL异常处理 异常处理使用BEGIN...EXCEPTION结构,可以捕获并处理运行时错误。预定义异常如NO_DATA_FOUND(未找到数据)和TOO_MANY_ROWS(数据过多)是常见的异常情况。 七、PL/SQL动态SQL 通过EXECUTE ...
* 异常处理部分(Exception section):是可选的,在这一部分中处理异常或错误。 PL/SQL 块语法: [DECLARE] --- declaration statements BEGIN --- executable statements [EXCEPTION] --- exception statements ...
1. **结构化**:PL/SQL支持流程控制语句(如IF-THEN-ELSE,CASE,WHILE,FOR循环)和异常处理,使得开发者能够编写复杂的逻辑代码。 2. **集成性**:PL/SQL直接嵌入到Oracle数据库中,可以创建存储过程、函数、...
1. **PL/SQL基础**:PL/SQL的基础语法,如变量声明、数据类型、流程控制语句(如IF-THEN-ELSIF,FOR循环,WHILE循环)、异常处理(BEGIN-EXCEPTION-END结构)等。 2. **函数与过程**:如何定义和调用用户自定义的...