程序异常是在操作期间正常,出现在节目的准备过程是不可避免的例外。但是,必须有一个相应的异常处理机

制,以保证程序的正常运行。PL/SQL程序运行过程中出现的错误。称为异常。

一个优秀的程序都应该可以正确处理

各种出错的情况。并尽可能的从错误中恢复。

PL/SQL提供了异常处理机制。

概念:

异常处理(exception)是用来处理正常运行过程中未预料的事件,程序块的异常处理定义的错误和自己定义的错误,

因为PL/SQL程序块一旦产生异常而没有指出怎样处理时,程序就会异常的终止。

有三种类型的错误

提前定义异常:

是Oracle系统异常中的一种。用于处理常见的异常。

Oracle系统定义了它们的错误编号和名字。当执行PL/SQL代码产生提前定义错误时,该异常会被自己主动的抛出,异常处理机制捕获后,进行处理。最经常使用的两个异常是no_date_found 和 too_mang_rows ,错误编号为1403 和1422 ,为没有找到数据和结果返回多行错误。

非提前定义异常:

该类异常特定是。Oracle定义了它们的编号,可是没有名字,须要用户在声明中定义它们的名字。有Oracle自己主动引发。

自己定义异常:

处理用户定义的错误,有些操作并不会产生系统错误,可是从业务角度规则考虑。不是非常符合规则。

结构:

EXCEPTION

WHEN  exception_name1 THEN  code ;

WHEN  exception_name2 THEN  code ;

...

WHEN  OTHERS THEN  code ;

END ;

异常处理步骤

定义异常:在声明部分为错误异常定义。exce_name exception ; pragma  exception_init(exce_name error_number);

抛出异常:产生错误时,抛出与异常相应的错误。

raise exce_name ;

捕获及处理异常:异常处理部分对异常进行捕获,并进行处理。

例:使用提前定义异常no_data_found ,避免执行时提示未找到数据。

declare


  v_sal emp.sal%type ;

begin

  select sal into v_sal from emp where empno = 7938 ;

  dbms_output.put_line(v_sal);

exception

  when no_data_found then dbms_output.put_line('没有该条数据');

end;

在运行delete from dept where deptno  = 10语句的时候,系统会抛出 ORA-02292: 违反完整约束条件 (SCOTT.FK_DEPTNO) - 已找到子记录 异常。系统为它定义了编号,可是没有命名名字。用户能够自己定义一个名字。

例:非定义异常,处理违反完整性约束错误。

declare

  exce_deptno exception ;

  pragma exception_init(exce_deptno , -2292) ;

begin

  delete from dept where deptno = 10 ;

exception

  when exce_deptno then dbms_output.put_line('雇员表中使用了该部门号');

end ;

例:用户自己定义异常。当雇员的工资小于1000 时,抛出异常并进行处理。

declare

  e_sal exception ;

  v_empno  emp.empno%type ;

  cursor cou_sal is  select * from emp ;

begin

  for c in cou_sal loop

      dbms_output.put_line(c.sal);

      if(c.sal < 1000) then

       v_empno := c.empno;

       raise e_sal ;

       end if ;

  end loop ;   

exception

  when e_sal then dbms_output.put_line(v_empno || '该涨工资了');

end ;

异常函数

PL/SQL程序在出现出错时,通过使用异常函数能够获得错误代码以及相关的错误说明,使用SQLCODE用于获得错误代码,SQLERRM用户获得错误描写叙述。

例:获得错误代码和描写叙述

begin

  delete from dept where  deptno =10 ;

exception

  when  others then dbms_output.put_line(sqlcode || '---'||sqlerrm);

end ;

版权声明:本文博主原创文章,博客,未经同意不得转载。

Oracle 学习笔记 17 -- 异常处理(PL/SQL)的更多相关文章

  1. Oracle学习笔记十 使用PL/SQL

    PL/SQL 简介 PL/SQL 是过程语言(Procedural Language)与结构化查询语言(SQL)结合而成的编程语言,是对 SQL 的扩展,它支持多种数据类型,如大对象和集合类型,可使用 ...

  2. oracle学习笔记4:PL/SQL

    PL/SQL是没命名的存储过程,函数,触发器,PL/SQL块的语法格式如下: [declare] --声明部分,可选 begin --执行部分,必须 [exception] --异常处理部分,可选 e ...

  3. oracle学习(二)pl/sql基础

    pl/sql组成:DDL DML DCL pl/sql特点: SQL&PL/SQL编译器集成PL/SQL,支持SQL所有范围的语法 支持CASE语句和表达式 继承和动态方法释放 类型进化.属性 ...

  4. oracle 学习(五)pl/sql语言存储过程&包

    首先搞清楚俩概念 存储过程(procedure)&程序包(package) 存储过程:数据库对象之一,可以理解为数据库的子程序,在客户端和服务器端可以直接调用它.触发器是与表直接关联的特殊存储 ...

  5. oracle学习笔记(九) SQL常用函数说明以及使用

    SQL常用函数说明以及使用 以下补充以下常用的函数,更多的请看oracle函数API文档 to_char to_char(8.58,'9.99') to_char(8.50,'9.00') to_ch ...

  6. oracle学习笔记(五) SQL操作符

    SQL操作符 算术操作符:+加,-减,*乘,/除 比较操作符: <,>,=,!=,<>,<=,>= 常用的判断,<>和!=相同 between $low ...

  7. oracle 学习(三)pl/sql语言函数

    系统内置函数 数学运算函数 字符串函数 统计函数 日期函数 用户定义函数:存储在数据库中的代码块,可以把值返回到调用程序.调用时如同系统函数一样 参数模式 IN模式:表示该参数时输入给函数的参数 OU ...

  8. SQL反模式学习笔记17 全文搜索

    目标:全文搜索 使用SQL搜索关键字,同时保证快速和精确,依旧是相当地困难. SQL的一个基本原理(以及SQL所继承的关系原理)就是一列中的单个数据是原子性的. 反模式:模式匹配 使用Like 或者正 ...

  9. Oracle学习笔记三 SQL命令

    SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)  

随机推荐

  1. C++基础之---union联合体大小分析

    #include <iostream> using namespace std; union un { int a[7]; double b; char c[10]; int d[3]; ...

  2. 玩转Windows服务系列——Debug、Release版本的注册和卸载,及其原理

    原文:玩转Windows服务系列——Debug.Release版本的注册和卸载,及其原理 Windows服务Debug版本 注册 Services.exe -regserver 卸载 Services ...

  3. 常用的JQuery数字类型验证正则表达式

    var regexEnum = {  intege:"^-?[1-9]//d*$",     //整数  intege1:"^[1-9]//d*$",     ...

  4. Unigine 基础入门

    1. 首先要搭建好开发环境: 1)Visual Stodio 已经安装了. 2). Microsoft Windows SDK 7.1 (for Windows 7): https://www.mic ...

  5. MySQL JDBC事务处理、封装JDBC工具类

    MySQL数据库学习笔记(十)----JDBC事务处理.封装JDBC工具类 一.JDBC事务处理: 我们已经知道,事务的概念即:所有的操作要么同时成功,要么同时失败.在MySQL中提供了Commit. ...

  6. Visual Prolog 的 Web 专家系统 (8)

    GENI核心 -- 推理引擎(2)流量控制 1.阐述fail."!"而回溯 与其他语言相比,,Prolog最大的特点.这是回溯机制. 回溯机制,还有的主要手段2个月,首先,通过使用 ...

  7. 使用WiX Toolset创建.NET程序发布Bootstrapper(安装策略管理)(二)——自定义安装

    原文:使用WiX Toolset创建.NET程序发布Bootstrapper(安装策略管理)(二)--自定义安装 自定义产品卸载方式 继续从上一次的基础上前进,现在我们已经知道了最简单的bootstr ...

  8. 《effective java》读书札记第三条用私有构造器或者枚举类型强化Singleton属性

    Singleton指只被实例化一次的类.一般用来搞那些创建很耗资源或者要求系统中只能有一个实例的类. 这个很经常使用.记得曾经实习面试的时候就有这个面试题. 一般採用的方法是将构造器私有化,然后提供一 ...

  9. gdb学习(一个)[再版]

    概要 gdb是GNU debugger的缩写,是编程调试工具. 功能 1.启动程序,能够依照用户自己定义的要求随心所欲的执行程序. 2.可让被调试的程序在用户所指定的断点处停住 (断点能够是条件表达式 ...

  10. RESTEasy:@FormParam、@PathParam、@QueryParam、@HeaderParam、@CookieParam、@MatrixParam说明

    在第一RESTEasy教程我们已经学习了基本的Web服务和休息我们已经测试了一个简单的REST风格的Web服务.在本教程中,我们将显示如何将Web应用程序元素(形式参数,查询参数和更多)为REST风格 ...