PL/SQL之二 异常处理
来源:互联网 发布:禅道数据库配置 编辑:程序博客网 时间:2024/05/16 05:10
1.概述
(1)异常:指PL/SQL的运行时错误。
(2)任何PL/SQL块都可以有一个异常处理块,其中可以包含一个或多个异常处理器,格式:
EXCEPTION when ex1 then 语句1 when ex2 or ex3 then 语句2 when others then 语句3
(3)异常类型:内置异常;自定义异常。
A:内置异常
它是以ora-n的错误;如果发生这类错误,系统会隐式的抛出。常见:no_data_found|too_many_rows|zero_divide|value_error等。
B:自定义异常
可用 ex_name EXCEPTION进行定义;必须显示抛出。
2.异常声明
(1)内置的异常,无需声明,可直接使用;自定义异常需要单独声明。(2)声明语法: ex_name EXCEPTION (3)关联异常与错误代码 PRAGMA EXCEPTION_INIT(ex_name,error_code)
3.异常抛出
(1)RAISE raise:将当前捕获到的异常原样抛出。 raise ex_name:将抛出名为ex_name的异常。(2)RAISE_application_error(用于未命名的自定义异常,将错误编号和错误文本关联起来) 作用:用于未命名的自定义异常,将错误编号和错误文本关联起来。 格式:raise_application_error(error_code,message);或 raise_application_error(erro_code,message,keep_errors); error_code:错误编码,范围在-20999到-20000之间。 message:错误文本,最多包含2048个字符。 keep_errors:它是Boolean参数,为True时,新错误被添加到已经抛出的错误列表中;为false时,新错误会替换已经抛出的错误栈。
4.异常处理
- 预定义异常
定义部分:异常名称 Exception;
PRAGMA EXCEPTION_INIT(错误名,- 错误代码); 将错误名称、错误代码关联起来。
异常处理:
when 错误名 then
语句块; - 自定义异常
定义部分:异常名称 Exception;
抛出异常:Raise 异常名称;
异常处理:
when 异常名称 then
语句块;
5.自定义异常示例
自定义异常示例一:
declare --1.声明异常 e_invalid_id exception; v_num number:=1;begin if v_num =1 then raise e_invalid_id;--2.抛出异常 end if;Exception when e_invalid_id then --3.发生异常时处理 dbms_output.put_line('My first exception!');end;
示例二:
--自定义异常DECLARE xiao_dog EXCEPTION;--声明部分 n_num NUMBER(2):=10;BEGIN IF n_num=10 THEN RAISE xiao_dog; --通过raise 异常名来抛出异常 END IF;EXCEPTION WHEN xiao_dog THEN --发生异常时做什么 dbms_output.put_line(' xiao_dog exception ......');END;
Raise_application_error示例:
declare v_num number:=1;begin if v_num =1 then raise_application_error(-20001,'错误文本区域,这是第二个错误。'); end if;Exception when others then raise;end;
exception_init示例:
declare v_zip zipcode.zip%type:=&sv_zip; e_child_exists exception; pragma exception_init(e_child_exists,-2292);begin delete from zipcode where zip=v_zip; dbms_output.put_line('zip'||v_zip||' has been deleted'); commit;Exception when e_child_exists then dbms_output.put_line('Delete students for this zipcode first');end;
6.异常传播
内部块的异常如果有没有异常处理部分,直接跳转到外部块中的异常处理部分;如果内部块中有异常处理部分,先执行内部异常处理,再跳到外部块,继续执行外部块里的内容。
声明处发生异常会直接跳转到此块所属块的异常处理部分;如果没有就直接转到主机环境。
7.异常内置函数
SQLCODE:返回错误编号
SQLERRM:返回错误信息,错误信息最大长度为512字节。
示例:
declare v_student_id number:=101; v_name varchar2(30);begin select rtrim(first_name)||' '||rtrim(last_name) into v_name from student where student_id=v_student_id;Exception when others then dbms_output.put_line('错误代码:'||SQLCODE); dbms_output.put_line('错误文本:'||substr(SQLERRM,1,200));end;
阅读全文
0 0
- PL/SQL之二 异常处理
- PL/SQL之异常处理
- 学习PL/SQL之六:处理异常
- Oracle数据库之PL/SQL异常处理
- PL/SQL编程学习之异常处理
- PL/SQL之五-异常处理
- PL/SQL 异常处理
- PL/SQL异常处理
- PL/SQL异常处理
- PL/SQL异常处理
- PL/SQL 异常处理
- pl/sql异常处理
- PL/SQL 异常处理
- PL/SQL异常处理
- PL SQL异常处理
- PL/SQL 异常处理
- pl/sql异常处理
- PL/SQL异常处理
- x86汇编从实模式到保护模式 记录思考和习题答案
- Given an array of non-negative integers, you are initially positioned at the first index of the arra
- 慢查日志(二)
- 为什么要使用SLF4J而不是Log4J
- 栈的应用,括号匹配,后缀表达式计算,有趣的汉诺塔--python实现
- PL/SQL之二 异常处理
- [Haskell] CodeWars|Sum of Digits
- Redis Jedis 之 Sharded 源码分析
- MySQL查询效率问题
- 二值图像孔洞填充
- C++中容易忘的知识点——list和forward_list(四)
- 常见调试错误操作集合
- (crm笔记2-3)关于模型驱动获取jsp对象
- 伪分布式安装hadoop2.8.1