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存储过程异常捕获

oracle存储过程异常捕获学习,执行及演示过程
  • xiaosheng_papa
  • xiaosheng_papa
  • 2016年03月08日 15:29
  • 9251

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

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

Oracle 存储过程中自定义异常

ORACLE 用户自定义异常
  • wangxy799
  • wangxy799
  • 2017年02月19日 22:35
  • 1490

OracleSQL 中的异常处理、存储过程、函数和触发器

早测   建表 学生表和班级表,学生表:学号/姓名/出生日期/电话/班级编号;班级表:编号/名称。(序列和约束要求自己建)   插入一些数据,实现如下查询:   1 查询电话号码是138,139...
  • carolcoral
  • carolcoral
  • 2017年12月26日 08:38
  • 49

oracle 存储过程使用实例(含事物和异常处理)

create or replace procedure ZMD_GIFCONVERT(p_productcode  varchar2,                                 ...
  • zk_1949
  • zk_1949
  • 2013年12月17日 17:32
  • 649

关于存储过程和函数异常出现和JAVA捕获简单处理方案

1.想法 在调用存储过程时候,如果出现出错,应该在页面弹出异常提示信息,快速定位错误原因, 也应该在存储过程和函数过程中尽可能的捕获概率发生较大的异常情况,并且在客户端页面通知(如果发生的话) 首...
  • rnZuoZuo
  • rnZuoZuo
  • 2014年03月26日 02:21
  • 2118

mysql存储过程之异常处理篇

mysql存储过程也提供了对异常处理的功能:通过定义HANDLER来完成异常声明的实现     语法如下: DECLARE handler_type HANDLER FOR c...
  • qq_22642239
  • qq_22642239
  • 2016年10月10日 09:57
  • 2761

MySql存储过程的异常处理理论及实例

原文地址点击此处 MySql存储过程异常处理示例: 在网上查了好多资料,发现关于mysql的异常处理资料都是一些错误号列表,对于平时运行中,我们可能更多的希望能够记录准确的错误消息到日志中. ...
  • darkdragonking
  • darkdragonking
  • 2017年07月03日 17:44
  • 395

Oracle学习之常用对象(三)—异常&变量&存储过程

这一章,我们谈谈变量,异常和存储过程。对他们的使用语法进行描述。 1、一般变量   DECLARE     --声明变量     V_NAME    VARCHAR2(30);     V_...
  • u011744784
  • u011744784
  • 2016年02月13日 17:31
  • 508

MySQL存储过程的异常定义及处理

MySQL存储过程的异常定义及处理 定义异常. Declare condition_name CONDITION FOR [condition type] [condition type]: S...
  • kang389110772
  • kang389110772
  • 2016年04月26日 21:41
  • 583
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Oracle存储过程的异常处理
举报原因:
原因补充:

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