Oracle系列之异常处理

涉及到表的处理请参看原表结构与数据  Oracle建表插数据等等

使用select into语句读取tb_Employee的一行,使用异常处理处理no_data_found和two_many_rows的系统预定义异常

set serveroutput on;
declare
emp tb_Employee%rowtype;
begin
select * into emp from tb_Employee
where ename = ‘SCOTT‘;
dbms_output.put_line(‘SCOTT ‘‘s sal is : ‘ || emp.sal);
exception
when no_data_found then
dbms_output.put_line(‘no data found exception‘);
end;
/
declare
emp tb_Employee%rowtype;
begin
select * into emp from tb_Employee
where deptno =20;
dbms_output.put_line(‘The sal is : ‘ || emp.sal);
exception
when too_many_rows then
dbms_output.put_line(‘too many rows exception‘);
end;
/

使用嵌套异常端处理,循环读取emp_id_minval 和 emp_id_maxval之间的员工,使得其中存在不存在员工号。输出对应员工的ename,不存在的员工输出“not exists such empolyee”。

declare
emp_id tb_Employee.pk_Employee_ID%type;
v_ename tb_Employee.ename%type;
emp_id_minval tb_Employee.pk_Employee_ID%type;
emp_id_maxval tb_Employee.pk_Employee_ID%type;
begin
emp_id_minval:=&emp_id_minval;
emp_id_maxval:=&emp_id_maxval;
for emp_id in emp_id_minval..emp_id_maxval loop
begin
select ename into v_ename from tb_Employee
where pk_Employee_ID=emp_id;
dbms_output.put_line(‘ename:‘||v_ename);
exception
when no_data_found then
dbms_output.put_line(‘not exists such empolyee‘);
end;
end loop;
end;
/

写一个处理ora-01400 (不能插入空值)的系统异常的示例程序和异常处理

declare
insert_excep exception;
pragma exception_init(insert_excep, -01400);
begin
insert into tb_Department
(pk_Department_ID, dname) values (50, null);
exception
when insert_excep then
dbms_output.put_line(‘INSERT OPERATION FAILED‘);
dbms_output.put_line(SQLERRM);
end;
/

使用SQLCODE,SQLERRM,获得异常的编号和错误信息,并输出异常的编号和错误信息

declare
emp tb_Employee % rowtype;
error_code number;
error_message varchar2(255);
begin
select * into emp from tb_Employee
where ename = ‘SCOTT‘;
dbms_output.put_line(‘SCOTT ‘‘s salary is : ‘ || emp.sal);
exception
when too_many_rows then
error_code := SQLCODE;
error_message := SQLERRM;
dbms_output.put_line(error_code || ‘ ‘ || error_message);
end;
/

自定义一个异常,抛出这个异常并处理

declare
invalid_department exception;
name varchar2(20) := ‘&name‘;
deptno number := &deptno;
begin
update tb_Department
set dname = name
where pk_Department_ID = deptno;
if sql % notfound then
raise invalid_department;
end if;
exception
when invalid_department then
dbms_output.put_line(‘No such department‘);
end;
/

使用raise_application_error抛出一个应用异常

declare
v_ename tb_Employee.ename%type:=‘&v_ename‘;
e_name exception;
pragma exception_init(e_name, -20999);
begin
delete from tb_Employee
where ename = v_ename;
if sql % notfound then
raise_application_error(-20999, ‘This is not a valid ename‘);
end if;
exception
when e_name then
dbms_output.put_line(‘The ename ‘||v_ename||‘ exists, Please choose again‘);
end;
/
时间: 2024-10-13 14:05:45

Oracle系列之异常处理的相关文章

ORACLE PL/SQL异常处理(Exception)学习笔记

1.PL/SQL错误类型 错误类型 报告者 处理方法 编译时错误 PL/SQL编译器 交互式地处理:编译器报告错误,你必须更正这些错误 运行时错误 PL/SQL运行时引擎 程序化地处理:异常由异常处理子程序引发并进行捕获 2.异常的声明 有两种异常:用户自定义异常和预定义异常 用户自定义异常就是由程序员自己定义的一个错误.该错误还不是非常重要,所以并没有将整个错误包含在Oracle的错误中.例如,它可能是一个与数据有关的错误.而预定义异常则对应于一般的SQL和PL/SQL错误. 用户自定义异常是

足球与oracle系列(5):fifa14游戏缺失的directX库类比于oracle的rpm包

***********************************************声明**********************************************  原创作品,出自 "深蓝的blog" 博客,欢迎转载,转载时请务必注明出处,否则追究版权法律责任. 表述有错误之处,请您留言或邮件([email protected])指明,不胜感激. 本文转载必须保留此处:http://blog.csdn.net/huangyanlong/article/det

Oracle PL/SQL 异常处理

Oracle数据库中的异常:没有异常的转移,因为没有受检异常和非受检异常得区分. 1.异常的产生: 2.异常的处理: declare --变量定义,初始化赋值. begin --变量的赋值,函数调用,if,while等. exception --异常处理代码 when others then 异常处理语句. end: 3.异常的抛出:raise 4.多异常处理:Java的多异常是通过数据类型区分,Oracle数据库的多异常是通过异常编号区分. 区别不同的异常是实现多异常处理前提. declare

足球和oracle系列(3):oracle过程排名,世界杯第二回合战罢到来!

足球与oracle系列(3):oracle进程排名.世界杯次回合即将战罢! 声明:        这不是技术文档,既然学来几招oracle简单招式.就忍不了在人前卖弄几下.纯为茶余饭后与数朋库友的插科打诨.仅仅为轻松中带有一丝的诙谐,IT技术也能用来调侃一番,还蛮耐人寻味.        同一时候近来数月oracle知识点忘记了不少,为了把知识点重现.点滴间偶出灵感乍现.以一种自由的形式将其公布.因为本人学艺不精.文中列举的样例或故事.当中必定会有与技术联系牵强之处,望大家海涵. 仅仅当是一部小

足球与oracle系列(2):巴西揭幕战预演,oracle体系结构杂谈

巴西:战术打法:4222不动摇,主力阵容构架无悬念 核心体系无异议,4222完整诠释,体系架构如此清晰 世界顶级球队:巴西 数据库技术核心团队:甲骨文 教练员:DBA 守门员:归档日志文件 四大后防保证:数据文件.参数文件.日志文件.控制文件 四大中场核心:共享池(库缓存区.数据字典缓冲区).数据缓冲区.日志缓冲区 双前锋:user进程.server进程 替补:大池.java池.流池(有时的板凳球员可以主宰最后的比赛胜负) 脏块:足球也罢.轨迹也罢.这都已不再重要 实例参数文件:球员大名单 pf

C#进阶系列——WebApi 异常处理解决方案

前言:上篇C#进阶系列——WebApi接口传参不再困惑:传参详解介绍了WebApi参数的传递,这篇来看看WebApi里面异常的处理.关于异常处理,作为程序员的我们肯定不陌生,记得在介绍 AOP 的时候,我们讲过通过AOP可以统一截获异常.那么在我们的WebApi里面一般是怎么处理异常的呢,今天这一篇,博主带着大家一起来实践下WebApi的异常处理. WebApi系列文章 C#进阶系列——WebApi接口测试工具:WebApiTestClient C#进阶系列——WebApi 跨域问题解决方案:C

足球与oracle系列(4):从巴西惨败于德国,想到,差异的RAC拓扑对比!

足球与oracle系列(4):从巴西惨败于德国,想到,差异的RAC拓扑对比! 前期回顾: 本来想说今晚,回头一想,应该是今早第二场半决赛就要开战了!先来回味一下之前的比赛,本届8支小组赛第一名已经全部晋级八强了,更展现出这八大进程的技术效用(哈哈,注:oracle中本没有什么主要进程之说,之所以说某个进程比较重要,都是在某些特定场景下人为规定的),也许是巧合,进程们继续畅游着oracle演绎的足球世界.先来回顾一下: ---------------------------------------

足球与oracle系列(3):oracle进程排名,世界杯次回合即将战罢!

足球与oracle系列(3):oracle进程排名,世界杯次回合即将战罢! 声明:        这不是技术文档,既然学来几招oracle简单招式,就忍不了在人前卖弄几下.纯为茶余饭后与数朋库友的插科打诨,只为轻松中带有一丝的诙谐,IT技术也能用来调侃一番,还蛮耐人寻味.        同时近来数月oracle知识点忘记了不少,为了把知识点重现,点滴间偶出灵感乍现,以一种自由的形式将其发布,由于本人学艺不精,文中列举的例子或故事,其中必然会有与技术联系牵强之处,望大家海涵.只当是一部小菜鸟的杂记

oracle系列(六)OEM与常见故障处理

博主QQ:819594300 博客地址:http://zpf666.blog.51cto.com/ 有什么疑问的朋友可以联系博主,博主会帮你们解答,谢谢支持! 前言:oracle除了使用命令操作以外,还可以使用OEM图形化管理,日常的管理工作都可以通过OEM操作,包括数据库对象的创建,用户权限的管理,数据文件和参数的配置.备份和恢复操作等. 一.OEM知识点 1.OEM简介 OEM是采用直观而且方便的图像化界面来控制和管理ORACLE数据库的工具集,它包含大量对DBA有用的工具.在oracle中