Oracle存储过程的异常处理

转载 2015年07月08日 13:45:39

文章出处:

http://www.cnblogs.com/linjiqin/archive/2011/04/18/2019905.html

1、为了提高存储过程的健壮性,避免运行错误,当建立存储过程时应包含异常处理部分。
2、异常(EXCEPTION)是一种PL/SQL标识符,包括预定义异常、非预定义异常和自定义异常;
3、预定义异常是指由PL/SQL提供的系统异常;非预定义异常用于处理与预定义异常无关的Oracle错误(如完整性约束等);自定义异常用于处理与Oracle错误的其他异常情况。
4、RAISE_APPLICATION_ERROR用于自定义错误消息,并且消息号必须在-20000~-20999之间

                 

 命名的系统异常     产生原因 
access_into_null    未定义对象 
case_not_found     case中若未包含相应的when,并且没有设置 
collection_is_null    集合元素未初始化 
curser_already_open    游标已经打开 
dup_val_on_index    唯一索引对应的列上有重复的值 
invalid_cursor     在不合法的游标上进行操作 
invalid_number    内嵌的 sql 语句不能将字符转换为数字  
no_data_found     使用 select into 未返回行,或应用索引表未初始化的  
too_many_rows     执行 select into 时,结果集超过一行 
zero_divide     除数为 0 
subscript_beyond_count    元素下标超过嵌套表或varray的最大值 
subscript_outside_limit   使用嵌套表或 varray 时,将下标指定为负数 
value_error     赋值时,变量长度不足以容纳实际数据 
login_denied     pl/sql 应用程序连接到 oracle 数据库时,提供了不正确的用户名或密码      确的用户名或密码 
not_logged_on     pl/sql 应用程序在没有连接 oralce 数据库的情况下访问数据      问数据 
program_error     pl/sql 内部问题,可能需要重装数据字典& pl./sql系统包     统包 
rowtype_mismatch          主游标变量与 pl/sql 游标变量的返回类型不兼容 
self_is_null     使用对象类型时,在 null 对象上调用对象方法 
storage_error     运行 pl/sql 时,超出内存空间 
sys_invalid_id     无效的 rowid 字符串 
timeout_on_resource    oracle 在等待资源时超时

--自定义异常处理
CREATE OR REPLACE PROCEDURE stu_proc
(
  --多个用逗号隔开
  v_id IN NUMBER
) IS
  --多个用分号隔开
  v_max_id NUMBER;
  v_name VARCHAR2(20);
  v_raise EXCEPTION; 
BEGIN
  SELECT MAX(a.id) INTO v_max_id FROM student a;
  IF v_id>v_max_id THEN
    RAISE v_raise;
  END IF;
  SELECT o.sname INTO v_name FROM student o WHERE o.id=v_id;
  dbms_output.put_line('学生名称为:'||v_name);
EXCEPTION
  WHEN v_raise THEN 
    RAISE_APPLICATION_ERROR(-20010, 'v_id not exists!');
  WHEN NO_DATA_FOUND THEN 
    RAISE_APPLICATION_ERROR(-20011, 'ERROR:不存在!');
END stu_proc;


相关文章推荐

Oracle 存储过程异常处理

转载自:http://blog.csdn.net/jojo52013145/article/details/6585833 1、异常的优点        如果没有异常,在程序中,应当检查...

Oracle存储过程中异常处理总结

对于一些比较复杂的逻辑处理,我们通常hui

Oracle 存储过程异常处理 .

1、异常的优点        如果没有异常,在程序中,应当检查每个命令的成功还是失败,如    BEGIN    SELECT ...    -- check for ’no data fo...

Oracle - 存储过程异常处理事务分析

Oracle存储过程中的事务是如何处理的?通常情况下。整个过程是作为一个事务整体被提交或回滚的,这属于数据库的基本知识,这里简单说明:   1通常情况通常情况下,oralce将整个存储过程作为一个事务...
  • cbjcry
  • cbjcry
  • 2017年04月13日 10:36
  • 409

Oracle存储过程异常处理总结

1、异常的优点        如果没有异常,在程序中,应当检查每个命令的成功还是失败,如    BEGIN    SELECT ...    -- check for ’no data fo...

oracle 存储过程,游标、异常处理,集合使用入门详解

我们在进行pl/sql编程时打交道最多的就是存储过程了。存储过程的结构是非常的简单的,我们在这里除了学习存储过程的基本结构外,还会学习编写存储过程时相关的一些实用的知识。如:游标的处理,异常的处理,集...

106---oracle的PL/SQL,异常处理, 游标(CURSOR), 子程序,存储过程

一、     PL/SQL   PL/SQL是过程语言(Procedural Language)与结构化查询语言(SQL)结合而成的编程语言 PL/SQL的工作原理 PL/SQL引擎接受 PL...

109---oracle的oracle的PL/SQL,异常处理, 游标(CURSOR), 子程序,存储过程

1.      表空间   创建一个自动增长的表空间tp_orders CREATE TABLESPACE tp_orders DATAFILE 'E:\Data\WORKTBS01.DBF' ...

存储过程的异常处理

 这部分,主要讲解一些简单的问题、异常处理器和条件。下面首先看几个简单的问题: 1、log of failures 错误日志 在INSERT失败时,希望将错误记录到日志文件中,以便需要时能查...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Oracle存储过程的异常处理
举报原因:
原因补充:

(最多只允许输入30个字)