分享

pl/sql中使用非预定义例外,以及例外函数RAISE

 0728zxx 2013-03-04

pl/sql中使用非预定义例外,以及例外函数RAISE_APPLICATION_ERRO的介绍

(2011-12-21 11:45:58)
分类: sql
使用非预定义例外包括三步:首先在定义部分定义例外名,然后在例外和oracle错误之间建立关联,最终在例外处理部分捕捉并处理例外。
定义Oracle错误和例外之间的关系,需要使用伪过程EXCEPTION_INIT,以ORA-02291为例:
DECLARE
  e_integerity EXCEPTION;
  PRAGMA EXCEPTION_INIT(e_integerity,-2291);
BEGIN
  UPDATE emp SET deptno=&dno WHERE empno=&eno;
EXCEPTION WHEN e_integerity then
    dbms_output.put_line('该部门不存在');
END;

输入dno:11
输入empno:7788

例外函数RAISE_APPLICATION_ERRO的介绍:
里外函数包括SQLCODE(去的错误代号),SQLERRM(错误号所对应的错误消息)。
RAISE_APPLICATION_ERROR:只能在子程序中(存储过程、触发器、函数、包)使用,不能在匿名块中使用。错误号必须是在-20000到-20999之间。例子:
create or replace procedure raise_comm
  (eno NUMBER,commission 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,'该雇员无补助');
  END IF;
EXCEPTION 
  WHEN NO_DATA_FOUND THEN
    dbms_output.put_line('该雇员不存在');
END;

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多