博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Oracle 学习笔记 17 -- 异常处理(PL/SQL)
阅读量:6588 次
发布时间:2019-06-24

本文共 1990 字,大约阅读时间需要 6 分钟。

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

制,以保证程序的正常运行。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 ;

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

你可能感兴趣的文章
使用jQuery实现一个类似GridView的编辑,更新,取消和删除的功能
查看>>
幸运的背后,总是靠自身的努力在支撑
查看>>
云计算面临安全挑战
查看>>
C# 线程手册 第三章 使用线程 Monitor.TryEnter()
查看>>
分享11个超棒的移动应用(mobile apps)开发解决方案
查看>>
mysql5.5.17源代码安装
查看>>
关于【cocos2dx-3.0beta-制作flappybird】教程在3.2project中出现找不到CCMenuItem.h的解决方法...
查看>>
7z格式、LZMA压缩算法和7-Zip详细介绍
查看>>
imx6 uboot splash image
查看>>
转:全栈工程师的知识栈列表
查看>>
C/C++获取文件大小
查看>>
深入理解Java内存模型(五)——锁
查看>>
Chalubo僵尸网络来袭 IOT设备或将受到DDoS攻击
查看>>
实用功能一手玩转!复合机操控面板一览
查看>>
乌鲁木齐大雾弥漫 局地能见度不足200米
查看>>
骚年,还在为歌荒发愁吗?python教你爬取网易云热门歌单
查看>>
如何实现百万TPS?详解JMQ4的存储设计
查看>>
Play! Framework 系列(一):初探 play 框架
查看>>
Shiro【授权、整合Spirng、Shiro过滤器】
查看>>
MarkDown语法
查看>>