Oracle PL/SQL中异常高级特性示例解析

  (

PL/SQL过程语言/SQL,过程语言/SQL)是结合了Oracel过程语言和结构化查询语言(SQL)的一种扩展语言。

  

优点:   

(1) PL/SQL具有编程语言的特点,它能把一组SQL语句放到一个模块中,使其更具模块化种序的特点。

  

(2) PL/SQL可以采用过程性语言控制程序的结构。

  

(3) PL/SQL有自动处理的异常处理机制。

  

(4) PL/SQL程序块具有更好的可移植性,可移植到另一个Oracle数据库中。

  

(5) PL/SQL程序减少了网络的交互,有助于提高程序性能。

  

在OraclePL/SQL语句块中异常的异常处理部分是非常重要的组成部分,它决定了在PL/SQL语句块内部可执行部分在发生异常错误时,程序是友好地提示:程序遇到某些错误而无法执行,还是抛出一堆难以理解的甲骨文内部错误码。

  

本文只介绍3种PL/SQL异常的三种高级形态,用于解决甲骨文内置异常过少,很多时候不能够满足实际的使用需求。

  

  

& # 8195; -是甲骨文提供的一种特殊的内置过程,允许程序员为特定的程序创建有意义的错误消息,适用于用户自定义定义异常。
  & # 8195;-语法结构
  & # 8195;& # 8195;RAISE_APPLICATION_ERROR (error_number error_message);或者
  & # 8195;& # 8195;RAISE_APPLICATION_ERROR (error_number、error_message keep_errors)
  & # & # 8195;8195;error_number是与特定错误消息关联的错误编号,甲骨文预留了-20999 - -20000专门提供给程序员自定义错误代码。
  & # & # 8195;8195;error_message是错误消息文本,最多包含2048个字符。
  & # & # 8195;8195;keep_errors是可选的布尔参数,默认为假,如果为真的,新抛出的错误会被添加到已抛出的错误列表中,这个错误列表称为错误栈,如果为假,新错误会替换已抛出的错误栈。
  & # 8195;-适用于未命名的用户定义异常,负责把错误编号和错误消息关联,用户定义了异常,却没有定义该错误的名称
  & # 8195;-使用RAISE_APPLICATION_ERROR过程,程序员能够遵循与甲骨文一致的方式返回错误消息。
  

  

——示例代码

        声明   v_id号:=,p_id;   v_name varchar2 (20);   v_sal数量;   开始   如果v_id比;0然后   选择ename,萨尔v_name, v_sal从emp empno=v_id;   dbms_output.put_line(杆(10)| | v_name | |的| | v_sal);   其他的   raise_application_error(-20001 '雇员id不能负的。');   如果;   异常   当NO_DATA_FOUND   dbms_output.put_line(杆(10)| |“没有这样的员工id”| | v_id);   结束;/输入值p_id: 40   老2:v_id号:=,p_id;   新2:v_id号:=40;      没有这样的雇员id是40      PL/SQL过程成功完成。/为p_id输入值:-90   老2:v_id号:=,p_id;   新2:v_id数量:=-90;   声明   *   误差在1号线:   ora - 20001:雇员id不能消极。   在第11行ora - 06512: 之前      

——示例解析:该PL/SQL代码会根据用户输入的员工Id、查询员工的姓名和工资。当我们输入存在的员工编号时,程序能够正常返回结果,如果输入不存在Id,则选择到语句会抛出没有返回行,进而使程序进入异常处理部分(本部分为举例),程序同样执行成功,当输入一个负数时,如果条件语句就会进入到raise_application_error部分,由于可执行部分运行发生错误,执行焦点会立即转移到异常处理部分,而异常处理部分没有关于该异常的处理,所以程序报错,并返回到用户界面。

  

——是哟个raise_application_error,程序员可以使程序实现像Oracle系统产生的错误消息。

  

——事实上,单纯使用raise_application_error,因为没有异常的名称,如果要对其进行异常处理,只能够使用别人(下文有专门的介绍)。

  


  

  

& # 8195; -使用EXCEPTION_INIT编译指令,可以将用户自定义的甲骨文错误编号和用户自定义的错误名称关联起来,相当于用户自定义错误和RAISE_APPLICATION_ERROR的结合体。
  

  

& # 8195; - EXCEPTION_INIT出现在语句块的声明部分:& # 8195;

        exception_name例外;   & # 8195;& # 8195;编译指示exception_init (exception_name error_code)      

——考虑如下代码:

        声明   v_no号:=,p_no;   开始   删除从部门deptno=v_no;   dbms_output.put_line(杆(10)| |“部门id”| | v_no | |“已经删除”);   结束;/为p_no输入值:20   老2:v_no号:=,p_no;   新2:v_no号:=20;   声明   *   误差在1号线:   ora - 02292:完整性约束(SCOTT.FK_DEPTNO)违反了——孩子记录发现   ora - 06512: 4号线

Oracle PL/SQL中异常高级特性示例解析