Oracle对PLSQL中的异常处理


当前第2页 返回上一页

RAISE_APPLICATION_ERROR 的语法如下:

RAISE_APPLICATION_ERROR(error_number,error_message,[keep_errors] );
  • error_number:从 –20,000 到 –20,999 之间的参数,
  • error_message:是相应的提示信息(< 2048 字节),
  • keep_errors:可选,如果keep_errors =TRUE ,则新错误将被添加到已经引发的错误列表中。如果keep_errors=FALSE(缺省),则新错误将替换当前的错误列表。

例:创建一个函数get_salary, 该函数检索指定部门的工资总和,其中定义了-20991和-20992号错误,分别处理参数为空和非法部门代码两种错误:

CREATE OR REPLACE FUNCTION get_salary(p_deptno NUMBER) #函数检索指定部门的工资总和
RETURN NUMBER 
AS
  v_sal NUMBER; #函数get_salary返回v_sal值
BEGIN
  IF p_deptno IS NULL THEN
    RAISE_APPLICATION_ERROR(–20991, '部门代码为空'); #用户定义的异常处理
  ELSIF p_deptno<0 THEN
    RAISE_APPLICATION_ERROR(–20992, '无效的部门代码');
  ELSE
    SELECT SUM(employees.salary) INTO v_sal FROM employees 
    WHERE employees.department_id=p_deptno;
    RETURN v_sal;
  END IF;

调用函数

DECLARE 
  V_salary NUMBER(7,2);
  V_sqlcode NUMBER;
  V_sqlerr VARCHAR2(512);
  Null_deptno EXCEPTION;  #定义异常情况
  Invalid_deptno EXCEPTION; #定义异常情况
  PRAGMA EXCEPTION_INIT(null_deptno,–20991);  #非预定义的异常,将它与oracle错误联系起来
  PRAGMA EXCEPTION_INIT(invalid_deptno, –20992); #非预定义的异常,将它与oracle错误联系起来
BEGIN
  BEGIN
    V_salary :=get_salary(–10);
  EXCEPTION
    WHEN invalid_deptno THEN
      V_sqlcode :=SQLCODE;
      V_sqlerr  :=SQLERRM;
      INSERT INTO errlog(errcode, errtext) VALUES(v_sqlcode, v_sqlerr); #将错误SQLCODE及SQLERRM存入到表errlog中  
      COMMIT;
  END ;

例:定义触发器,使用RAISE_APPLICATION_ERROR阻止没有员工姓名的新员式记录插入:

CREATE OR REPLACE TRIGGER tr_insert_emp
BEFORE INSERT ON employees
FOR EACH ROW
BEGIN
  IF :new.first_name IS NULL OR :new.last_name is null THEN
    RAISE_APPLICATION_ERROR(–20000,‘Employee must have a name.‘);
  END IF;

到此这篇关于Oracle对PL/SQL异常处理的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持。


标签:Oracle

返回前面的内容

相关阅读 >>

oracle客户端与plsql查询数据乱码修改成中文的快速解决方法

详解oracle常用函数trunc

oracle时间日期操作方法小结

zabbix6通过odbc方式监控oracle19c的详细过程

oracle 函数大全

oracle如何删除数据库?

oracle表分区的概念及操作

oracle set和reset的使用教程案例

oracle10g 安装方法

一个oracle分页程序,挺实用的.

更多相关阅读请进入《oracle》频道 >>


数据库系统概念 第6版
书籍

数据库系统概念 第6版

机械工业出版社

本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...