当前位置:首页 > 日记 > 正文

Oracle异常使用的详细说明

Oracle异常使用的详细说明
本文给出了Oracle异常使用的示例:

一、例外分类

Oracle将异常划分为三种类型:预定义异常、非预定义异常和自定义异常。

1)预定义的异常用于处理常见的Oracle错误。

2),非预定义异常用于处理预定义异常不能处理的异常。

3)自定义异常用于处理与Oracle错误无关的其他情况。

下面是一个小例子,说明如果不处理异常会发生什么情况。

编写一个存储过程,可以接收员工的编号并显示雇员的姓名。

SQL代码如下所示:
进行设置;
声明
v_ename EMP ENAME %型;
开始
选择从哪里v_ename易名为EMP empno =没有;
dbms_output.put_line('' | |名称:v_ename);
结束;
/

只需输入不存在的数字,返回将抛出以下异常:

ora-01403:没有找到数据

ora-06512:6行

异常捕获SQL代码如下所示:
进行设置;
声明
v_ename EMP ENAME %型;
开始
选择从哪里v_ename易名为EMP empno =没有;
dbms_output.put_line('' | |名称:v_ename);
例外
当no_data_found然后
dbms_output.put_line(数不到!);
结束;
/

随便输入不存在的号码,回到车上,会友好提示:号码还没有找到!

两。预定义的异常处理

预定义的异常是由PL / sql.an内部异常提供系统异常时触发的PL / SQL应用程序违反了Oracle的监管限制。PL / SQL提供了超过20个预定义的异常开发。让我们给你介绍常见的例外。

1),case_not_found预定义的异常

当case语句写在发展PL / SQL语句块,如果没有必要在当条件分支的case_not_found例外条款,将引发。
进行设置;
创建或替换程序sp_pro6(SPNO数)是
v_sal EMP。萨尔分型;
开始
选择从哪里v_sal萨尔为EMP empno = SPNO;
案例
当v_sal<1000
更新EMP组萨尔=萨尔+ 100 = SPNO empno;
当v_sal<2000
更新EMP组萨尔=萨尔+ 200 = SPNO empno;
案例;
例外
当case_not_found然后
dbms_output.put_line(the'case声明不符条件和v_sal| | | |);
结束;
/
-调用存储过程
SQL> exec sp_pro6(7369);

case语句没有匹配4444的条件。

2), cursor_already_open predefined exceptions

当打开重新打开游标的cursor_already_open例外是隐式地触发,
声明
emp_cursor是光标
选择ename,萨尔从EMP;
开始
打开emp_cursor;申报-当光标已经打开,所以无需再打开它
在emp_cursor环emp_record1
dbms_output.put_line(emp_record1。ename);
结束循环;
例外
当cursor_already_open然后
dbms_output.put_line('cursor已经打开的);
结束;
/

3),dup_val_on_index预定义的异常

当在对应于惟一索引的列中插入重复值时,隐含触发器异常将被暗示。
开始
插入部门价值(10,公共关系部,北京);
例外
当dup_val_on_index然后
dbms_output.put_line(不重复的值在deptno列);
结束;
/

4),invalid_cursorn预定义的异常

当试图对非法游标执行操作时,就会触发此异常。

例如,尝试从未打开的游标中提取数据,或关闭尚未打开的游标。此异常将触发此异常。
声明
emp_cursor是光标
选择ename,萨尔从EMP;
emp_record emp_cursor %ROWTYPE;
开始
开放emp_cursor;打开游标
取emp_cursor为emp_record;
dbms_output.put_line(emp_record。ename);
近emp_cursor;
例外
当invalid_cursor然后
dbms_output.put_line(请检查是否打开游标的);
结束;
/

5),invalid_number预定义的异常

此异常在输入数据不正确时触发。

例如,当数字100在厕所中写入时,它将触发异常。
进行设置;
开始
更新EMP组萨尔=萨尔+ 'AAA';
例外
当invalid_number然后
dbms_output.put_line('incorrectly输入号码);
结束;
/

6),no_data_found预定义的异常

下面是一个PL - C / SQL块,当选择进入的执行不返回行时触发异常。
进行设置;
声明
v_sal EMP。萨尔分型;
开始
选择从哪里进入v_sal EMP ENAME SAL = 'ljq;
例外
当no_data_found然后
dbms_output.put_line(不要有员工);
结束;
/

7),too_many_rows预定义的异常

执行SELECT语句时,如果返回多个行,则触发异常。
声明
v_ename EMP ENAME %型;
开始
选择不进v_ename从EMP;
例外
当too_many_rows然后
dbms_output.put_line(返回多行);
结束;
/

8),zero_divide预定义的异常

在执行2 0语句时触发异常。

9),value_error预定义的异常

当赋值操作执行,例外value_error将如果变量的长度不足以支持实际数据触发。

其他预定义的异常(这些异常不被触发,而是由Oracle触发,因此名称被称为其他预定义异常)。

1、login_denied

此异常是在用户非法登录时触发的。

2、not_logged_on

如果用户没有登录,执行DML操作,并将引发异常

3、storage_error

如果内存空间超出或内存被损坏,则触发此异常。

4、timeout_on_resource

如果Oracle正在等待资源,则超时会触发异常。

三。非预定义的异常

非预定义的异常来处理Oracle错误是预定义的异常无关。使用预定义的异常只能处理21 Oracle错误,当使用PL / SQL开发一个应用程序,其他一些Oracle错误可能会遇到的问题。例如,当DML语句是在PL / SQL语句块的执行,约束规则被违反,等等。在这种情况下,你也可以处理各种例外的甲骨文,因为非预定义的异常不多,我不在这里举一个例子。

四。处理自定义异常

预定义异常和自定义异常都与Oracle错误有关,Oracle错误可能意味着相应的异常。自定义异常与Oracle错误无关。它们是特定情况下开发人员定义的异常。

问题:请写下一个,接受雇员的编号,并在员工工资中加1000元。如果员工不存在,请提示。
创建或替换程序ex_test(SPNO数)是
开始
更新EMP组萨尔=萨尔+ 1000 = SPNO empno;
结束;
/
-调用存储过程,
执行ex_test(56);

这里,编号56是不存在的,报纸是不正常的,为什么现在不报例外呢

因为只是SELECT语句

你是怎样解决这个问题的修改代码如下:
-自定义异常
创建或替换程序ex_test(SPNO数)是
-对异常的定义
我的例外;
开始
-更新用户
更新EMP组萨尔=萨尔+ 1000 = SPNO empno;
SQL %发现这意味着没有更新
——并触发并提高;
如果SQL %未提出我的;
最后如果;
例外
当我再dbms_output.put_line(不更新任何用户);
结束;
/

现在再测试一遍:

SQL> exec ex_test(56);
不更新任何用户

希望本文能帮助您设计oracle数据库程序。

相关文章

excel函数在excel指数函数中的应用

excel函数在excel指数函数中的应用

函数,指数函数,电脑软件,excel,Excel中的索引函数常用于办公室,如果不理解的朋友可以一起学习,接下来是利用excel带来的指数函数供你参考。 excel的指数函数用法: 使用步骤1的指数函数:打开桌面上的Excel文档 使用步骤2的指数函数:文档作为图…

js写的一个简单的产品放大效果代码

js写的一个简单的产品放大效果代码

产品,效果,代码,简单,电脑软件,购物网站的产品页面通常有一个产品展示区域,地图区域有一个功能,它是产品地图的放大功能,在左边移动焦点区域,可以详细地放大,细节如下,实现这个功能的方法也很简单。 实验:制作产品的重点。 所需技能: 1,获取页面元…

批处理SQL文件的mysql方法

批处理SQL文件的mysql方法

文件,方法,批处理,电脑软件,SQL,1。SQL文件要执行1.sql,2.sql,3.sql,4.sql,等。 2。写一batch.sql文件: 源1.sql; 2.sql源; 源3.sql; 源4.sql; 3、执行源/批下MySQL目录 / batch.sql文件; 以上是为您执行的MySQL批处理SQL文件的全部内容。我希望你…

excel文字数字快速开关输入

excel文字数字快速开关输入

数字,文字,输入,快速,电脑软件,在制作excel工作表时,通常都有数据和文本,这样在输入中反复使用输入法是很麻烦的,下面的技巧允许excel表自动切换输入法,避免切换的麻烦。 打开Excel表格,打开中文输入法,选中单元格区域,需要输入中文。单击数据菜…

QQ不能接收大文件的一部分

QQ不能接收大文件的一部分

大文件,电脑软件,QQ,问:最近我的QQ在接收文件时总有一些奇怪的问题。一些大文件可以正常接收,有些大文件无法接收。无法接收到的文件似乎是以发送者的形式在几秒钟内传输的。我该怎么办 答:你先检查一下QQ,设置在基本建立RARR;文件管理找到允许…

PS图象处理软件是一个令人印象深刻

PS图象处理软件是一个令人印象深刻

是一个,图象,处理软件,战士,深刻,本教程主要介绍背景制作和色彩调整,背景主要是滤镜效果,渲染战争感觉,色彩调制主要用于梯度贴图。用这种方法很好。可以使用一个简单的步骤。 最终效果 1、新。恢复默认的黑色和白色的D键,执行渲染;滤波器mdash…

photoshopcs6定制设计的入门教程

photoshopcs6定制设计的入门教程

入门教程,电脑软件,有时候PS没有我们想要的,所以我们需要自己去做。这里的萧边,告诉你photoshopcs6自定义模式,共同学习。 photoshopcs6自定义图案的方法: 图中所示的图案。 选择魔术棒工具,选择除图以外的部分,如图所示。 然后在图中右键单击…

MySQL决定了汉字、日期和数字的特

MySQL决定了汉字、日期和数字的特

数字,日期,汉字,功能,决定了,几个常用的mysql函数,mysql判断汉字的具体功能,日期和数字,是共享的。具体内容如下 1。判断字符串是否为汉字的返回值:1 -汉字0 -不是汉字。 如果存在fc_is_hanzi功能下降; 创建功能fc_is_hanzi( p_str varchar(1024…

WPS表如何改变网格线颜色WPS表教程

WPS表如何改变网格线颜色WPS表教程

教程,网格,颜色,电脑软件,WPS,当我们想修改WPS表中网格线的颜色时,我们该怎么做呢让我们告诉你如何在WPS表中改变网格线的颜色。 WPS表更改网格线的颜色: 1。打开我们的WPS表,我们可以看到软件默认的网格线,如下所示。 2、将鼠标切换到工作表…

检索PowerPoint2013的Flash嵌入功

检索PowerPoint2013的Flash嵌入功

检索,功能,电脑软件,Flash,请确认开发工具;选项卡是否已包含在功能选项卡中,如果未找到,请打开PowerPoint选项对话框,切换到自定义;功能区;右侧面板上的复选框的主选项卡;开发工具选项卡。确认生效后,滑入Flash动画,你可以切换到开发工具;;;控制选项卡,…

十字交叉位置的水平垂直中心

十字交叉位置的水平垂直中心

位置,中心,电脑软件,在本文中,我们分享了CSS定位的横;实施水平垂直中心效应,具体内容如下 1。先看效果达到 实际效果图 我可以看到,我的实现首先使用父级div来定位水平垂直中心,然后父级div定位两个交叉点的div。 见实现代码: xml代码将内容复…

对写作方法的分析,在window.onload()$

对写作方法的分析,在window.onload()$

方法,电脑软件,onload,window,document,首先,发现问题: 最近公司有一批微信公共项目,以促进纤维环直接使用js +离子的发展,这是用来在DOM图Echarts ECharts,结合节点的具体发展的初始化过程中发现的图,表明节点是违法的;但它是代码写的在在window…