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;
/
Oracle系列之异常处理的更多相关文章
- .Net程序员学用Oracle系列(25):触发器详解
1.触发器理论 1.1.触发器的应用场景 1.2.触发器的类型 1.3.DML 触发器的触发顺序 2.触发器实战 2.1.创建触发器 2.1.1.创建 DML 触发器 2.1.2.创建 DDL 触发器 ...
- C#进阶系列——WebApi 异常处理解决方案
前言:上篇C#进阶系列——WebApi接口传参不再困惑:传参详解介绍了WebApi参数的传递,这篇来看看WebApi里面异常的处理.关于异常处理,作为程序员的我们肯定不陌生,记得在介绍 AOP 的时候 ...
- Oracle系列:记录Record
Oracle系列:记录Record 分类: [Oracle] (15) 版权声明:本文为博主原创文章,未经博主允许不得转载. Oracle系列:记录(Record) 一,什么是记录(Record) ...
- 足球和oracle系列(3):oracle过程排名,世界杯第二回合战罢到来!
足球与oracle系列(3):oracle进程排名.世界杯次回合即将战罢! 声明: 这不是技术文档,既然学来几招oracle简单招式.就忍不了在人前卖弄几下.纯为茶余饭后与数朋库友的插科 ...
- .Net程序员学用Oracle系列(1):导航目录
本人从事基于 Oracle 的 .Net 企业级开发近三年,在此之前学习和使用的都是 (MS)SQL Server.未曾系统的了解过 Oracle,所以长时间感到各种不习惯.不方便.怪异和不解,常会遇 ...
- .Net程序员学用Oracle系列(2):准备测试环境
<.Net程序员学用Oracle系列:导航目录> 本文大纲 1.创建说明 1.1.为什么要创建的测试环境? 1.2.了解 Oracle 实例的默认用户 2.创建环境 2.1.创建基本环境 ...
- .Net程序员学用Oracle系列(6):表、字段、注释、约束、索引
<.Net程序员学用Oracle系列:导航目录> 本文大纲 1.表 1.1.创建表 1.2.修改表 & 删除表 2.字段 2.1.添加字段 2.2.修改字段 & 删除字段 ...
- .Net程序员学用Oracle系列(7):视图、函数、过程、包
<.Net程序员学用Oracle系列:导航目录> 本文大纲 1.视图 1.1.创建视图 2.函数 2.1.创建函数 2.2.调用函数 3.过程 3.1.创建过程 3.2.调用过程 4.包 ...
- .Net程序员学用Oracle系列(8):触发器、任务、序列、连接
<.Net程序员学用Oracle系列:导航目录> 本文大纲 1.触发器 1.1.创建触发器 1.2.禁用触发器 & 启用触发器 & 删除触发器 2.任务 2.1.DBMS_ ...
随机推荐
- ReactiveCocoa入门教程——第二部分(转)
ReactiveCocoa是一个框架,它能让你在iOS应用中使用函数响应式编程(FRP)技术.在本系列教程的第一部分中,你学到了如何将标准的动作与事件处理逻辑替换为发送事件流的信号.你还学到了如何转换 ...
- sea.js总结
SeaJS是一个遵循CommonJS规范的JavaScript模块加载框架. 参考以下网址进行详细学习: https://segmentfault.com/a/1190000000357191?pag ...
- Struts2文件上传功能浅析
本文将以图片上传为例,解析Struts2文件上传的主要过程实例的功能:1.在jsp页面选择要上传的图片, 2.为待上传的图片取名,以便于查找 ...
- centos6.5 安装python2.7.5
1. 下载python2.7.5,保存到 /data/http://www.python.org/ftp/python/ 2. 解压文件tar xvf Python-2.7.5.tar.bz2 3. ...
- 重新安装Ubuntu12.04
重新安装Ubuntu12.04 之所以我重新安装Ubuntu,因为我第一次给根目录分配的空间过小,好像是20GB吧~结果编译Android的时候,编译了3个小时候直接中止掉了.郁闷.这个也告诉我们一定 ...
- Keil 4 与Proteus 7.8联调
实验环境: windows 8.1 pro with Keil 4 and Proteus 7.8 both cracked. 步骤: 下载联调工具Vdmagdi,安装. keil下Option/De ...
- Html5页面返回机制解决方案
需要处理的返回场景: 1.正常的a->b->c 2.页面上的按钮触发需要登陆 3.页面跳转需要登陆 4.页面上的可修改的部分(如选择地址,地址页面本身也是可以增删改查的) 整体的原则是原路 ...
- python3 中自带urllib库可下载图片到本地
刚从python3下载图片的语句python2的不太一样,具体python3语句如下: form urllib import request jpg_link = '......' #图片链接 re ...
- Web程序发布后显示个性化图标
采用Tomcat发布程序后,浏览器上默认显示程序的图标是Tomcat图标.如下图所示: 需要显示自己个性化的图标,比如,这里显示一个图标. 只需要如下三步设置即可. 将制作的ico图标放在程序的根目录 ...
- 信号量 sem_undo设置
一 为什么要使用信号量 为了防止出现因多个程序同时访问一个共享资源而引发的一系列问题,我们需要一种方法,它可以通过生成并使用令牌来授权,在任一时刻只能有一个执行线程访问 代码的临界区域.临界区域是指执 ...