PL/SQL异常处理介绍

1、定义

异常:PL/SQL在执行的过程中所产生的标识符,PL/SQL中的一个警告或错误都被称为异常。

错误通常分为两类:

编译时错误--一般是语法错误,由PL/SQL引擎发现并报告给用户,程序本身不能处理,因为还没运 行。

运行时错误--程序在运行时引发的错误,例如没返回结果与返回多个结果(只能返回一行结果的情 况下)

异常处理---通常是指处理运行时错误。

引发异常的一个重要原因是处理数据时发生错误。统计表明,SELECT语句、DML语句以及游标操作语 句更容易引发异常。

编写PL/SQL块的主要目的是处理数据,而PL/SQL块在逻辑上与数据是分开的,程序员根本无法预料 数据的变化。

例如,要查询部门10的员工,程序员根本不知道这个部门中有没有员工, 有一个还是有多个员工。

所以在编写程序时,程序员应该考虑各种可能出现的异常,在程序中编写这些异常的处理代码,这 样的程序才能经受各种错误的考验。

2、预定义异常

预定义异常:Oracle把一些常见的错误定义为有名字的异常,这就是预定义的异常。【有异常代码 ,异常名称,异常消息】

Oracle有许多预定义的异常,在进行处理时不需要再定义,只需要编写相应的异常处理程序即可。

当PL/SQL块执行发生错误时,数据库服务器将自动抛出相应的异常,并执行编写的异常处理程序。

预定义说明的 oracle 异常

ORACLE 错误       异常名                             说明

ORA-0001            Dup_val_on_index            试图破坏一个唯一性限制

ORA-0051            Timeout-on-resource        在等待资源时发生超时

ORA-0061            Transaction-backed-out     由于发生死锁事务被撤消.

ORA-1001            Invalid-cursor                  试图使用一个无效的游标

ORA-1012            Not-logged-on                 没有连接到ORACLE

ORA-1017            Login-denied                   无效的用户名/口令

ORA-1403            No_data_found                没有找到数据

ORA-1422            Too-many-rows               select into 返回多行

ORA-1476            Zero-divide                      试图被零除

ORA-1722            Invalid-number                 转换一个数字失败

ORA-6500            Storage-error                   内存不够引发的内部错误

ORA-6501            Program-error                  内部错误

ORA-6502            Value-error                      转换或截断错误

ORA-6511            Cursor-already-open          试图打开一个已存在的 游标

ORA-6530            Access-into-null                 试图为null 对象的属性赋值

时间: 2024-09-18 16:07:06

PL/SQL异常处理介绍的相关文章

PL/SQL异常处理

     在设计PL/SQL程序时,经常会发生这样或那样的错误,异常处理就是针对错误进行处理的程序段,Oracle 9i中的异常处理分为系统预定义异常处理和自定义异常处理两部分. 系统预定义异常处理     系统预定义异常处理是针对PL/SQL程序编译.执行过程中发生的问题进行处理的程序. 下列代码为正确代码,在[SQLPlus Worksheet]中能够顺利执行.    ―――――――――――――――――――――――――――――――――――――    set serveroutput on  

PL/SQL异常处理初步

PL/SQL处理异常不同于其他程序语言的错误管理方法,PL/SQL的异常处理机制与ADA很相似,有一个处理错误的全包含方法.当发生错误时,程序无条件转到异常处理部分,这就要求代码要非常干净并把错误处理部分和程序的其它部分分开.oracle允许声明其他异常条件类型以扩展错误/异常处理.这种扩展使PL/SQL的异常处理非常灵活. 当一个运行时错误发生时,称为一个异常被抛出.PL/SQL程序编译时的错误不是能被处理得异常,只有在运行时的异常能被处理.在PL/SQL程序设计中异常的抛出和处理是非常重要的

PL/SQL异常处理(原创)

Exception概述 Exception是一种PL/SQL标识符,当运行的PL/SQL块出现错误或警告,则会触发异常处理.为了提高程序的健壮性,可以在PL/SQL块中引入异常处理部分,进行捕捉异常,并根据异常出现的情况进行相应的处理.ORACLE异常分为两种类型:系统异常.自定义异常.其中系统异常又分为:预定义异常和非预定义异常.预定义异常ORACLE定义了他们的错误编号和异常名字,常见的预定义异常处理如下 错误号 异常错误信息名称 说明 ORA-0001 Dup_val_on_index 违

PL/SQL --> 异常处理(Exception)

--================================ -- PL/SQL --> 异常处理(Exception) --================================           Exception是一种PL/SQL标识符,当运行的PL/SQL块出现错误或警告,则会触发异常处理.为了提高程序的健壮性,可以在PL/SQL块中引 入异常处理部分,进行捕捉异常,并根据异常出现的情况进行相应的处理.   一.异常的类型      ORACLE异常分为两种类型:系统

oracle-Oracle PL/SQL 外键关联的异常处理

问题描述 Oracle PL/SQL 外键关联的异常处理 删除父表记录后, 若不写异常处理器,则会报错,并自动回滚所有被删除的数据. 若写了异常处理器,则在异常处理中回滚,只能恢复父表记录, 而子表中对应的记录被删除仍无法恢复. 预期结果应该是在回滚之后被删除的所有记录都恢复. 解决方案 外键关联肯定不能直接删除父表啊 可以这么做, 方法一:先删除外键关联,再去删除父表 方法二:先删除子表,再去删除父表 解决方案二: Oracle:pl/sql 异常处理 解决方案三: 同意1楼说的,删子,再删父

[推荐]ORACLE PL/SQL编程之五:异常错误处理(知已知彼、百战不殆)

原文:[推荐]ORACLE PL/SQL编程之五:异常错误处理(知已知彼.百战不殆) [推荐]ORACLE PL/SQL编程之五: 异常错误处理(知已知彼.百战不殆)       继上三篇:ORACLE PL/SQL编程之八:把触发器说透               ORACLE PL/SQL编程之六:把过程与函数说透(穷追猛打,把根儿都拔起!)               [推荐]ORACLE PL/SQL编程之四:把游标说透(不怕做不到,只怕想不到)  得到了大家的强力支持与建议,万分感谢.

PL/SQL --> 动态SQL的常见错误

--============================ -- PL/SQL --> 动态SQL的常见错误 --============================       动态SQL在使用时,有很多需要注意的地方,如动态SQL语句结尾处不能使用分号(;),而动态PL/SQL结尾处需要使用分号(;),但不能使用正 斜杠结尾(/),以及shcema对象不能直接作为变量绑定.本文介绍了动态SQL的常见问题.   一.演示动态SQL的使用     下面的示例中,首先使用动态SQL基于sco

PL/SQL --> DML 触发器

--======================= -- PL/SQL --> DML 触发器 --=======================         何谓触发器?简言之,是一段命名的PL/SQL代码块,只不过该代码块在特定的条件下被触发并且执行.对于这样的代码我们称之为触发器 .触发器根据触发类型的不同又分为不同级别的触发器,下面将给出触发器的分类,定义,以及使用的示例.   一.触发器的相关概念     1.触发器的分类         通常根据触发条件以及触发级别的不同分为DM

PL/SQL --> INSTEAD OF 触发器

--============================== -- PL/SQL --> INSTEAD OF 触发器 --==============================       INSTEAD OF 触发器常用于管理编写不可更新的视图,INSTEAD-OF触发器必须是行级的.     可以用INSTEAD OF触发器来解释INSERT.UPDATE和DELETE语句,并用备用的程序代码替换那些指令.   一.不可更新视图     基于下列情形创建的视图,不可直接对其进行D