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-函数Decode进行多值判断
- Oracle_本地计算机上的OracleOraDb11g_home1TNSListener 服务启动后停止
- 最新数据库排行:MySQL第二 Oracle面临危机
- [Oracle] Data Pump 详细使用教程(4)- network_link
- oracle-sql模式匹配
- oracle-sql系统学习-ddl-dml
- oracle启动过程2
- oracle组件
- Oracle ORDS的简单SQL配置模板
- Oracle 数据库执行 操作系统的命令
- SQL优化:一篇文章说清楚Oracle Hint的正确使用姿势
- Oracle 11G 安装文档
- Generating sql insert into for Oracle
- PLSQL Developer启动: Initialization error Oracle Client没有正确安装
- oracle清除sql的缓存
- Source Control for Oracle源代码控制系统
- Linux下Oracle client(sqlplus)安装和配置
- oracle查看执行最慢与查询次数最多的sql语句
- ORACLE常用性能监控SQL【一】
- oracle 查看执行最慢 sql
- 在Oracle中利用SQL_TRACE跟踪SQL的执行
- 查询Oracle正在执行和执行过的SQL语句
- Oracle Java 14 (JDK 14)在Ubuntu、Linux Mint或Debian(使用PPA)安装配置
- Oracle Advanced Support系统SQL注入漏洞挖掘经验分享
- 81.网络安全渗透测试—[SQL注入篇20]—[Oracle+JSP-decode/BurpSuite布尔型盲注入]
- oracle 之if..else用法
- plsql在64位机器下读取tnsname.ora 及oracle_home异常的解决办法
- Oracle数据库如何授权收费(Database Licensing)
- lightdb匿名块及对oracle pl/sql的支持(oracle pl/sql转plpgsql)