Oracle 学习笔记 17 -- 异常处理(PL/SQL)
程序异常是在操作期间正常,出现在节目的准备过程是不可避免的例外。但是,必须有一个相应的异常处理机
制,以保证程序的正常运行。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)的更多相关文章
- Oracle学习笔记十 使用PL/SQL
PL/SQL 简介 PL/SQL 是过程语言(Procedural Language)与结构化查询语言(SQL)结合而成的编程语言,是对 SQL 的扩展,它支持多种数据类型,如大对象和集合类型,可使用 ...
- oracle学习笔记4:PL/SQL
PL/SQL是没命名的存储过程,函数,触发器,PL/SQL块的语法格式如下: [declare] --声明部分,可选 begin --执行部分,必须 [exception] --异常处理部分,可选 e ...
- oracle学习(二)pl/sql基础
pl/sql组成:DDL DML DCL pl/sql特点: SQL&PL/SQL编译器集成PL/SQL,支持SQL所有范围的语法 支持CASE语句和表达式 继承和动态方法释放 类型进化.属性 ...
- oracle 学习(五)pl/sql语言存储过程&包
首先搞清楚俩概念 存储过程(procedure)&程序包(package) 存储过程:数据库对象之一,可以理解为数据库的子程序,在客户端和服务器端可以直接调用它.触发器是与表直接关联的特殊存储 ...
- oracle学习笔记(九) SQL常用函数说明以及使用
SQL常用函数说明以及使用 以下补充以下常用的函数,更多的请看oracle函数API文档 to_char to_char(8.58,'9.99') to_char(8.50,'9.00') to_ch ...
- oracle学习笔记(五) SQL操作符
SQL操作符 算术操作符:+加,-减,*乘,/除 比较操作符: <,>,=,!=,<>,<=,>= 常用的判断,<>和!=相同 between $low ...
- oracle 学习(三)pl/sql语言函数
系统内置函数 数学运算函数 字符串函数 统计函数 日期函数 用户定义函数:存储在数据库中的代码块,可以把值返回到调用程序.调用时如同系统函数一样 参数模式 IN模式:表示该参数时输入给函数的参数 OU ...
- SQL反模式学习笔记17 全文搜索
目标:全文搜索 使用SQL搜索关键字,同时保证快速和精确,依旧是相当地困难. SQL的一个基本原理(以及SQL所继承的关系原理)就是一列中的单个数据是原子性的. 反模式:模式匹配 使用Like 或者正 ...
- Oracle学习笔记三 SQL命令
SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)
随机推荐
- 修改Tabhost样式和字体大小和居中显示
有时候我们的tabhost并不需要贴图,所以这个时候就必须把文字居中显示和设置大小了,代码如下 setContentView(R.layout.home_vzo_tabhost); ...
- ANDROID L——Material Design综合应用(Demo)
转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! Material Design: Material Design是Google推出的一个全 ...
- codeforces 577
codeforces 577A 题目链接:http://codeforces.com/problemset/problem/577/A 题目大意:给出一个n*n的表格,每个表格对应的值为横坐标*纵坐标 ...
- 24位和8位BMP图片保存纯C代码
BMP图片大家都知道,可以通过查看BMP图片结构使用纯C就可以打开,编辑,处理,保存图片.非常方便使用. 具体BMP结构可以参考:wingdi.h头文件.今天主要在进行删减代码,需要把多余的代码删除, ...
- Json for Java API学习
首先声明:本文来个非常多网友的博客,我通过參考了他们的博客,大致的了解了一些项目中经常使用的Json in java 类和方法,以及关于json的个人理解 个人对json的一些简单理解 在近期的学习中 ...
- window应用移植到Linux下(应用移植)
配置QT的环境变量,这台电脑à属性à高级系统设置à高级à环境变量à系统变量àpathàC:\Qt\Qt5.3.0\5.3\mingw482_32\bin;C:\Qt\Qt5.3.0\Tools\ ...
- 1.SQL统计某张表的列数。
select count(syscolumns.name) from syscolumns , sysobjects where syscolumns.id ...
- Android-2手机应用程序,短信应用
Activity生命周期 Android的核心组件 1.Viiew :界面 ,组织UI控件 2.Intent :意图,支持组件之间的通信 3.Activity:处理界面与UI互动 4.Conten ...
- 修改emlog后台登录路径的方法(转)
emlog后台登录地址的目录名称默认为admin,并且官方没有提供自定义后台登录入口名字的功能,这多少让我们觉得有些不安全,毕竟暴露一个网站的后台不是一件安全的事,今天就给您说下修改方法,增加一下网站 ...
- 为何要fork()两次来避免产生僵尸进程?
为何要fork()两次来避免产生僵尸进程? 当我们只fork()一次后,存在父进程和子进程.这时有两种方法来避免产生僵尸进程: 父进程调用waitpid()等函数来接收子进程退出状态. 父进程先结 ...