Oracle 异常详解(exception)

Oracle 异常详解(exception)Oracle异常详解(exception)来源:(33条消息)Oracle异常详解(exception)_鱼丸丶粗面-CSDN博客鱼丸丶粗面2018-10-0823:03:232949

大家好,又见面了,我是你们的朋友全栈君。

Oracle 异常详解(exception)

来源:(33条消息) Oracle 异常详解(exception)_鱼丸丶粗面-CSDN博客

鱼丸丶粗面 2018-10-08 23:03:23 2949 收藏 14
分类专栏: Oracle PL/SQL 文章标签: Oracle 异常 exception raise
版权

Oracle
同时被 2 个专栏收录
110 篇文章10 订阅
订阅专栏

PL/SQL
17 篇文章1 订阅
订阅专栏
文章目录
1 概述
1.1 思维导图
1.2 语法
2 异常分类
2.1 系统预定义
2.2 用户自定义
3 异常抛出
3.1 raise
3.2 raise_application_error
4 重写异常
1 概述
1. 概念
(1) 程序一旦发生异常而没有处理时,程序会 ‘自动终止’
(2) 反之,则跳转至 ‘最近一个 exception’ 进行处理
1
2
3
1.1 思维导图

1.2 语法
1. 异常处理可以按任意次序排列,但 ‘others’ 必须放在最后
2. 异常会被离它 ‘最近的一个 exception 块’ 捕获到
(1) 若异常被 <异常1> 捕获到,那么该异常到此结束(不会继续判断 <异常2> 及其后面的)

如:
declare
begin
程序代码块;
exception
when <异常1> then
异常语句1;
when <异常2> then
异常语句2;
when others then
其它异常;
end;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
例子:(除数不能为 0)

DECLARE
v_num NUMBER(5) := 5;
BEGIN
BEGIN
v_num := v_num / 0;
EXCEPTION
— 如果此处无 exception,则抛向最近一个 exception
WHEN OTHERS THEN
dbms_output.put_line(SQLCODE); — 异常编号
dbms_output.put_line(SQLERRM); — 异常描述信息
dbms_output.put_line(dbms_utility.format_error_backtrace); — 异常发生的位置
dbms_output.put_line(dbms_utility.format_call_stack); — 异常堆栈
END;
EXCEPTION
WHEN OTHERS THEN
dbms_output.put_line(‘若没有上面的 exception 代码块,异常才会被此处捕获’);
END;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2 异常分类
1. 异常的两种分类
(1) 系统预定义:Oracle 自动抛出(如:’违反唯一性约束’)
(2) 用户自定义:编码人员认为的 ‘非正常情况’

2. 其中 ‘用户自定义’ 的异常在 pl/sql 环境使用,需 ‘显示抛出’
1
2
3
4
5
基础数据准备:

create table stu_info(
sno number(3) constraint pk_stu_info_sno primary key,
sname varchar2(30)
);
1
2
3
4
2.1 系统预定义
insert into stu_info(sno, sname) values(1, ‘瑶瑶’);
insert into stu_info(sno, sname) values(1, ‘优优’);
1
2
报错截图:(ORA-00001: 违反唯一约束条件)

2.2 用户自定义

declare
v_num number(5) := -1;
exp_data_range exception; — 异常定义
begin
if v_num < 0 then
raise exp_data_range; — 异常抛出
end if;
exception
when exp_data_range then
dbms_output.put_line(‘数据范围不能为负数!’);
end;
1
2
3
4
5
6
7
8
9
10
11
测试结果:

数据范围不能为负数!
1
3 异常抛出
1. raise:异常抛出并在 pl/sql exception 块中处理

2. raise_application_error:异常抛出给 ‘应用程序’,pl/sql 中并不处理!
1
2
3
3.1 raise
上述提到的就有:2.2 用户自定义
3.2 raise_application_error
raise_application_error(error_number, error_message, error_boolean);
error_number : 取值范围: -20000 到 -20999 之间
error_message :相应的提示信息(< 2048 字节),超出则截取。
error_boolean : 可选项,若为 true: 则新错误将被添加到已经引发的错误列表中。
若为 false(默认):则覆盖。
1
2
3
4
5
例1:false(默认,覆盖异常信息,若有)

declare
v_num number(5) := -1;
begin
if v_num < 0 then
raise_application_error(-20001, ‘不能为负数!’); — 异常抛出
end if;
end;
1
2
3
4
5
6
7
异常抛出截图:

例2:true(追加异常信息)

declare
v_num number(5) := -1;
begin
begin
if v_num < 0 then
raise_application_error(-20001, ‘不能为负数!’); — 异常抛出
end if;
exception
when others then
raise_application_error(-20001, ‘true:追加异常信息’, true); — 异常抛出
end;
end;
1
2
3
4
5
6
7
8
9
10
11
12
异常抛出截图:

4 重写异常
1. 异常均可被重写
(1) 系统预定义
(2) 用户自定义
1
2
3
示例:重写系统预定义异常:ORA-01476: 除数为 0

declare
exp_divisor_of_zero_rewrite exception;
pragma exception_init(exp_divisor_of_zero_rewrite, -1476);
v_num number(1) := 3;
begin
v_num := v_num / 0;
exception
when exp_divisor_of_zero_rewrite then
raise_application_error(-20001, ‘除数不能为 0(重写异常)’);
end;
1
2
3
4
5
6
7
8
9
10
异常抛出截图:

————————————————
版权声明:本文为CSDN博主「鱼丸丶粗面」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_34745941/article/details/82846820

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/155267.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Quartus II 13.0安装和激活成功教程教程

    Quartus II 13.0安装和激活成功教程教程QuartusII软件是学习FPGA非常重要的软件,下面来介绍一下13.0版本的安装及激活成功教程教程:1、安装包介绍大家下载的完整版的QuartusII13.0软件应包含以下三个部分:请大家选择第三个“Quartus-13.0.0.156-windows.tar”压缩文件,即为我们的QuartusII13.0的主安装包,这是一个压缩文件,安装前需要解压。该包包含了开发FP…

    2022年10月16日
    0
  • phpStorm字体大小无法调整, 怎么办?

    phpStorm字体大小无法调整, 怎么办?

    2021年11月7日
    74
  • 什么是HEVC?解释了高效视频编码,H.265和4K压缩

    什么是HEVC?解释了高效视频编码,H.265和4K压缩高效视频编码(HEVC),也称为H.265,可以通过蓝光最佳视频压缩方法实现两倍的压缩。但它是如何工作的,是否足以让我们看到更好看的4K内容? 我想称之为H.265,因为它听起来很酷,但它的全称是高效视频编码(HEVC)。它是高级视频编码(AVC)的新继承者,也称为H.264,它是蓝光使用的压缩方案之一。HEVC的想法是提…

    2022年4月6日
    49
  • TCP拥塞控制机制(附面试题)

    TCP拥塞控制机制(附面试题)产生的原因∑对资源的需求&amp;amp;amp;gt;可用资源∑对资源的需求&amp;amp;amp;gt;可用资源\sum_{}^{}对资源的需求&amp;amp;gt;可用资源注意单纯的增加网络资源无法解决问题例如:把结点的存储空间扩大,更换更高速率的链路,提高结点处理机的运算速度,不仅不能解决问题,而且可能使网络性能更坏。原因:网络拥塞是许多因素引起的,单纯的解决一个可能会使上述情况得到一些缓解,但是会把拥塞转移到其…

    2022年6月24日
    19
  • setPositiveButton和setNegativeButton

    setPositiveButton和setNegativeButtonhttp://bbs.csdn.net/topics/380241826看看下面的回答

    2022年6月29日
    19
  • 0xc0000005发生访问冲突解决_更改兼容性还是c0000005

    0xc0000005发生访问冲突解决_更改兼容性还是c0000005该异常代号对应“访问冲突”,即内存的读写权限冲突,一般意味着代码中存在3种可能的问题……

    2022年10月3日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号