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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 编译器警告RegisterStartupScript已经过时

    编译器警告RegisterStartupScript已经过时protectedvoidAlertMsg(stringmsg){this.Page.RegisterStartupScript(“alert”,”<scriptlanguage=\”javascript\”>alert(‘”+msg+”‘);</script>”);}使用上面的代码建立的客户端脚本块编译器会警告Reg…

  • 关于身份证图片加密安全技术[通俗易懂]

    关于身份证图片加密安全技术[通俗易懂]前言现在的图片都是上传到cdn或者其它第三方服务器上,通过一个url进行访问,非常的方便,方便的同时也带来了另外一个问题,隐私安全问题,比如:好莱坞隐私照片泄漏。如何保证图片安全如果发生客户隐私图片的泄漏,将是非常严重的事情,会使当事人遭受到骚扰、企业遭受到质疑,那么如何保证用户上传图片的安全将是一件值得重视的事情,本篇介绍一种加密方式:异或加密。算法原理异或的运算方法是一个二进制运算:1^1=00^0=01^0=10^1=1两者相等为0,不等为1。对于一个字符来说,都可以用二进制

  • nslookup命令使用「建议收藏」

    nslookup命令使用「建议收藏」NSLOOKUP是NT、2000中连接DNS服务器,查询域名信息的一个非常有用的命令,可以指定查询的类型,可以查到DNS记录的生存时间还可以指定使用哪个DNS服务器进行解释。在已安装TCP/IP协议的电脑上面均可以使用这个命令。主要用来诊断域名系统(DNS)基础结构的信息。1、作用查询DNS的记录,查看域名解析是否正常,在网络故障的时候用来诊断网络问题。nslookup的用法相对来说还是蛮简单的,主要是下面的几个用法。2、使用2.1、直接查询nslookupdomain[dns-serve

    2022年10月19日
  • linux内核版本和发行版本的区别_linux内核版本号的构成

    linux内核版本和发行版本的区别_linux内核版本号的构成Linux的内核版本和发行版本1.内核版本内核是系统的心脏,是运行程序和管理像磁盘和打印机等硬件设备的核心程序,它提供了一个在裸设备与应用程序间的抽象层。例如,程序本身不需要了解用户的主板芯片集或磁盘控制器的细节就能在高层次上读写磁盘。内核的开发和规范一直是由Linus领导的开发小组控制着,版本也是惟一的。开发小组每隔一段时间公布新的版本或其修订版,从1991年10月Linus向世界…

  • sp_executesql介绍和使用

    sp_executesql介绍和使用execute相信大家都用的用熟了,简写为exec,除了用来执行存储过程,一般都用来执行动态Sql sp_executesql,sql2005中引入的新的系统存储过程,也是用来处理动态sql的,如: execsp_executesql@sql,N’@countintout,@idvarchar(20)’,@couout ,@id @sql为拼成的动态sql N’@countin…

  • html圣杯布局,三种实现圣杯布局方法「建议收藏」

    html圣杯布局,三种实现圣杯布局方法「建议收藏」本文介绍三种实现圣杯布局的方法,前两种可归为一类,与第三种方法差别在于加载顺序不同。圣杯布局实现1:步骤1:给出HTML结构:圣杯布局1*{margin:0;padding:0;text-Align:center;}#top{background:#666;height:60px;}#left{background:#E79F6D;}#content{background:…

发表回复

您的电子邮箱地址不会被公开。

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