百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术分析 > 正文

Oracle数据库扩展语言PL/SQL之Exception

liebian365 2024-10-28 17:15 29 浏览 0 评论

【本文详细介绍了Oracle数据库扩展语言PL/SQL中Exception的基本概念和使用方法,欢迎读者朋友们阅读、转发和收藏!】

1 异常处理概念

异常情况处理 (EXCEPTION) 是用来处理正常执行过程中未预料的事件,程序块的异常处理预定义的错误和自定义错误,由于 PL/SQL 程序块一旦产生异常而没有指出如何处理时 , 程序就会自动终止整个程序运行 。

有三种类型的异常错误:

1、 预定义 ( Predefined ) 错误

ORACLE 预定义的异常情况大约有 24 个。对这种异常情况的处理,无需在程序中定义,由 ORACLE 自动将其引发。

2、 非 预定义 ( Predefined ) 错误

即其他标准的 ORACLE 错误。对这种异常情况的处理,需要用户在程序中定义,然后由 ORACLE 自动将其引发。

3、 用户定义 (User_define) 错误

程序执行过程中,出现编程人员认为的非正常情况。对这种异常情况的处理,需要用户在程序中定义,然后显式地在程序中将其引发。

异常处理部分一般放在 PL/SQL 程序体的后半部 , 结构为 :

EXCEPTION
WHEN first_exception THEN <code to handle first exception >
WHEN second_exception THEN <code to handle second exception >
WHEN OTHERS THEN <code to handle others exception >
END ;

异常处理可以按任意次序排列 , 但 OTHERS 必须放在最后 。

2 异常错误传播

由于异常错误可以在声明部分和执行部分以及异常错误部分出现,因而在不同部分引发的异常错误也不一样。

2.1 在执行部分引发异常错误

当一个异常错误在执行部分引发时,有下列情况:

. 如果当前块对该异常错误设置了处理,则执行它并成功完成该块的执行,然后控制转给包含块。

. 如果没有对当前块异常错误设置定义处理器,则通过在包含块中引发它来传播异常错误。然后对该包含块执行步骤 1) 。

2.2 在声明部分引发异常错误

如果在声明部分引起异常情况,即在声明部分出现错误,那么该错误就能影响到其它的块。比如在有如下的 PL/SQL 程序:

DECLARE
Abc number(3) : =’abc’ ;
其它语句
BEGIN
其它语句
EXCEPTION
WHEN OTHERS THEN
其它语句
END ;

例子中,由于 Abc number(3)=’abc’ ;出错,尽管在 EXCEPTION 中说明了 WHEN OTHERS THEN 语句,但 WHEN OTHERS THEN 也不会被执行。但是如果在该错误语句块的外部有一个异常错误,则该错误能被抓住,如:

BEGIN
DECLARE
Abc number(3) : =’abc’ ;
其它语句
BEGIN
其它语句
EXCEPTION
WHEN OTHERS THEN
其它语句
END ;
EXCEPTION
WHEN OTHERS THEN
其它语句
END ;

3 异常错误处理编程

在一般的应用处理中,建议程序人员要用异常处理,因为如果程序中不声明任何异常处理,则在程序运行出错时,程序就被终止,并且也不提示任何信息。下面是使用系统提供的异常来编程的例子。

4 在 PL/SQL 中使用 SQLCODE , SQLERRM

由于 ORACLE 的错信息最大长度是 512 字节,为了得到完整的错误提示信息,我们可用 SQLERRM 和 SUBSTR 函数一起得到错误提示信息。

SQLCODE 返回错误代码数字 。

SQLERRM 返回错误信息 。

相关推荐

C#委托—马工教你轻松玩转委托(c#中委托)

前言大家好,我是马工!在C#中有一个小白谈之色变的知识点叫委托,很多学了一两年C#的还不知道委托究竟是什么东西,本文就来帮你彻底解开解惑,从此委托就是小儿科!...

AR农业种植指导(农业种植模式)

以下是一些常见的AR/VR在农业中的应用场景及相关源码示例的一些思路(注意,完整且复杂的源码通常需要根据具体需求和大量开发工作来完成,这里只是简单示例):1.AR农业种植指导-功能描述:通过AR...

C#中timer中的enable和start以及stop的作用分别是什么?

文章来自AI问答的摘录。在C#中,System.Timers.Timer和System.Windows.Forms.Timer都提供了Enabled属性以及Start()和Stop()方法来控制定时器...

AOP实现原理浅析(简述aop的原理以及作用)

在C#中实现一个简单的动态代理框架,可以通过反射和System.Reflection.Emit命名空间动态生成代理类。以下是一个分步指南和示例代码:...

如何防止数据库服务器的 SQL 注入攻击

如何防止数据库服务器的SQL注入攻击防止SQL注入攻击需要从代码开发、数据库配置到安全运维的全流程防护。以下是详细且可操作的防护策略和步骤:...

.NET依赖注入实战:基于Autofac的完全指南与代码示例

...

AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类

...

C# winform中chart控件解决显示大量曲线数据卡顿

前言:...

Java静态三剑客(静态内部类/静态方法/静态类)的正确打开方式

作为Java程序员必知的"静态三剑客",它们看似简单却暗藏玄机!本文将带你解锁高阶玩法,避免99%开发者都会踩的坑!一、概念速览(颠覆传统认知)...

生成AutoCAD图纸批量合并代码(autocad怎么合并图纸)

想要生成AutoCAD图纸批量合并的代码。首先,我需要确定他使用哪个版本的AutoCAD,因为不同版本的API可能不同,比如VBA、.NET(C#或VB.NET)或者AutoLISP。不过用户没有具体...

C#从入门到精通(4)—Linq实现集合快速转换、筛选、排序、分组

前言大家好,我是上位机马工,硕士毕业4年年入40万,目前在一家自动化公司担任软件经理,从事C#上位机软件开发8年以上!我们在C#开发中需要经常对集合中的数据进行处理,比如我需要将一个Int类型的集合数...

CSnakes:在.NET项目中嵌入Python代码的工具

...

CSharp(dotNet)绝版面试题,面试大全(二)

21.简述C#的密封类和密封方法?C#中,密封类和密封方法都是使用sealed修饰。密封类表示这个类不能被继承。密封方法表示这个方法不能被重写,和virtual方法相对。22.请介绍C#静态构造器的特...

C#从入门到精通(7)—C#裁剪图像的几种方法总结

前言大家好,我是上位机马工,硕士毕业4年年入40万,目前在一家自动化公司担任软件经理,从事C#上位机软件开发8年以上!我们在上位机软件开发过程中经常需要裁剪图像,本文就是对c#中常见的裁剪图像方法进行...

Csharp 进度条的使用(c#进度条是哪个控件)

【开发过程】(1)创建一个Windows应用程序,项目名称为Ex047,窗体默认为Form"(2)在窗体中添加菜单、工具栏和状态栏。(3)面添加ProgressBar.设置。(4)在窗体载入Loa...

取消回复欢迎 发表评论: