Oracle 异常处理
1. 预定义 ( Predefined )错误
ORACLE预定义的异常情况大约有24个。对这种异常情况的处理,无需在程序中定义,由ORACLE自动将其引发。
2. 非预定义 ( Predefined )错误
即其他标准的ORACLE错误。对这种异常情况的处理,需要用户在程序中定义,然后由ORACLE自动将其引发。
3. 用户定义(User_define) 错误
程序执行过程中,出现编程人员认为的非正常情况。对这种异常情况的处理,需要用户在程序中定义,然后显式地在程序中将其引发。
3、异常的结构
EXCEPTION
WHEN exception1 [OR exception2 . . .] THEN
statement1;
statement2;
. . .
[WHEN exception3 [OR exception4 . . .] THEN
statement1;
statement2;
. . .]
[WHEN OTHERS THEN
statement1;
statement2;
. . .] --在异常部分WHEN 子句没有数量限制
--WHEN OTHERS 是最后一个子句
--异常处理部分从关键字EXCEPTION开始
--当异常抛出后,控制无条件转到异常处理部分
--在离开块之前只能执行一种异常处理
4、异常类型
4.1 预定义异常
在相应的异常处理例程中引用错误的标准名来截获一个Oracle 服务器预定义错误。
DECLARE
test varchar(10);
BEGIN
SELECT DNAME INTO test FROM DEPT WHERE DEPTNO='';
DBMS_OUTPUT.PUT_LINE(test);
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('没有找到符合条件的数据');
WHEN TOO_MANY_ROWS THEN
DBMS_OUTPUT.PUT_LINE('返回的数据行过多');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('EORROR:'||SQLCODE||'-'||SQLERRM);
END;
4.2 非预定义异常
1. 在声明部分声明异常名。
语法:
exception EXCEPTION;
其中: exception 异常名
2. 使用PRAGMAEXCEPTION_INIT语句将异常处理名字和Oracle的错误代码关联起来.
语法:
PRAGMA EXCEPTION_INIT ( exception, error_number ) ;
其中: exception 先前声明的异常名
error_number 标准Oracle 错误代码
3. 在相应的异常处理例程中引用已声明的异常。
关键字 PRAGMA (伪指令pseudoinstructions)表示语句是一个编译指令,在执行PL/SQL块时并不处理该语句。在PL/SQL块中,一个编译指令EXCEPTION_INIT告诉编译器将一个异常处理的名字和一个Oracle错误代码联系起来。
DECLARE
e_emp_cons EXCEPTION;
PRAGMA EXCEPTION_INIT(e_emp_cons,-00001);
BEGIN
INSERT INTO emp
SELECT * FROM emp;
EXCEPTION
WHEN e_emp_cons THEN
dbms_output.put_line('违反唯一性约束');
END;
4.3 自定义异常
在PL/SQL块的声明部分声明
使用RAISE语句显式地发布
DECLARE
name varchar(10);
ex EXCEPTION; --定义异常ex
BEGIN
SELECT DNAME INTO name FROM DEPT WHERE DEPTNO='';
DBMS_OUTPUT.PUT_LINE(name);
IF NAME<>'HR' THEN
RAISE ex; --触发异常
END IF;
EXCEPTION
WHEN ex THEN
DBMS_OUTPUT.PUT_LINE('10号部门不是HR'); --处理异常
END;
4、异常的传递
当子块自己处理异常时,它可以正常终止,并且在子块的END语句之后可以立即将控制交给外部块。
然而,如果 PL/SQL出现了异常,但当前块中没有针对该异常的处理机,就会寻找外部块中有没有处理机,如果所有的外部块都不能处理这个异常,则就会在宿主环境中出现未经处理的异常。
当把异常传播给外部块,则当前块中的等待执行代码都不再被执行。
这种方法的优点就是内部块仅处理自己特有的错误,而将一般的异常处理留给外部块。
Oracle 异常处理的更多相关文章
- Oracle 异常处理汇总
Oracle 异常处理汇总 1.plsql无法连接 安装oracle,中间录入密码,用户是:sys,pass: 录入的密码. 连接数据库,建议创建新的用户,最好别直接用sys 安装完毕,则需要配置Ne ...
- Oracle异常处理——ORA-01502:索引或这类索引的分区处于不可用状态
Oracle异常处理--ORA-01502:索引或这类索引的分区处于不可用状态参考自:https://www.cnblogs.com/lijiaman/p/9277149.html 1.原因分析经过查 ...
- oracle异常处理——ORA-01000:超出打开游标最大数
oracle异常处理--ORA-01000:超出打开游标最大数https://www.cnblogs.com/zhaosj/p/4309352.htmlhttps://blog.csdn.net/u0 ...
- ORACLE异常处理及函数
有三种类型的异常错误 :预定义 ( Predefined )错误 ORACLE预定义的异常情况大约有24个.对这种异常情况的处理,无需在程序中定义,由ORACLE自动将其引发. 非预定义 ( Pred ...
- Oracle异常处理内容,隐式游标
异常处理 create or replace procedure pr_test3(v_bh in varchar2,v_xx out t_hq_ryxx%rowtype) is begin sele ...
- Oracle异常处理,动态游标
小例子,方便以后查阅. 包头需要声明: type C_CURSOR is ref cursor; procedure visitcount(in_date number, out_code out ...
- Oracle数据库---异常处理
Oracle异常处理在PL/SQL语句书写时,需要处理的异常-- 不做异常处理时DECLARE v_name emp.ename%TYPE; v_sal emp.sal%TYPE;BEGIN SELE ...
- .Net程序员学用Oracle系列(27):PLSQL 之游标、异常和事务
1.游标 1.1.游标属性 1.2.隐式游标 1.3.游标处理及案例 2.异常 2.1.异常类别 2.2.异常函数 2.3.异常处理及案例 3.事务 3.1.开始事务.结束事务 3.2.自治事务 3. ...
- oracle 在存储过程或函数中得到异常sql
BEGIN SQLSTR := 'UPDATE TBL ...'; EXECUTE IMMEDIATE SQLSTR; EXCEPTION WHEN OTHERS INSERT INTO LOG_TA ...
随机推荐
- Charles 应用
1.首先设置本机host文件,将需要测试的域名指向127.0.0.1:(测试域名没有代理,才会这么操作): 2.打开Charles,设置Proxy选项,取消“Windows Proxy”选中状态: 3 ...
- mysql一对多关联查询的时候筛选条件
mysql实现users 表和 logoin_log表是一对多, 现在是把user的信息找出来 关联上一些 logoin_log表的数据, 因为a表是多的一方,要多他的数据进行一些条件匹配,这个sql ...
- 零基础Android学习笔记-03 窗口间的数据传递
1.通过全局变量来传递. 新建一个全局的类继承于Application package com.example.helloworld; import android.app.Application; ...
- SQL Server 数据类型简介
在 SELECT 的查询过程和查询结果中,每个列.变量.表达式和参数都具有一个相关的数据类型.数据类型用于指定某个对象可保存的数据的类型. SQL Server系统的数据类型主要有:数值类型.日期和时 ...
- iOS - UIView操作(SWift)
1. UIView 视图的渐变填充 override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after ...
- UI5_HomeWorkCompanyViewController
// // ItemCompany.h // UI5_HomeWork // // Created by zhangxueming on 15/7/3. // Copyright (c) 2015年 ...
- ESB数据发布思路
通过esb已经将数据采集进数据库,现在需要开放一个接口,接受请求参数,进而通过参数进行数据查询,返回一段json格式的数据. ▼流程图: 刚开始尝试了很多个版本,可能是esb开发工具还用不熟练的原因吧 ...
- mobileconfig文件的签名和认证(signed、verified)
专题:基于IOS上MDM技术相关资料整理及汇总mobileconfig文件的签名和认证(signed.verified) 一.功能描述: 鉴于我们的设备和MDM server之间已经可以通信,并能完成 ...
- 基于JQuery+JSP的无数据库无刷新多人在线聊天室
JQuery是一款非常强大的javascript插件,本文就针对Ajax前台和JSP后台来实现一个无刷新的多人在线聊天室,该实现的数据全部存储在服务端内存里,没有用到数据库,本文会提供所有源程序,需要 ...
- C# 解析XML格式的字符串
public CreateOrderReturnResult GetCreateOrderReturnApi() { var result = new CreateOrderReturnResult( ...