涉及到表的处理请参看原表结构与数据  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系列之异常处理的更多相关文章

  1. .Net程序员学用Oracle系列(25):触发器详解

    1.触发器理论 1.1.触发器的应用场景 1.2.触发器的类型 1.3.DML 触发器的触发顺序 2.触发器实战 2.1.创建触发器 2.1.1.创建 DML 触发器 2.1.2.创建 DDL 触发器 ...

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

    前言:上篇C#进阶系列——WebApi接口传参不再困惑:传参详解介绍了WebApi参数的传递,这篇来看看WebApi里面异常的处理.关于异常处理,作为程序员的我们肯定不陌生,记得在介绍 AOP 的时候 ...

  3. Oracle系列:记录Record

    Oracle系列:记录Record   分类: [Oracle] (15) 版权声明:本文为博主原创文章,未经博主允许不得转载. Oracle系列:记录(Record) 一,什么是记录(Record) ...

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

    足球与oracle系列(3):oracle进程排名.世界杯次回合即将战罢! 声明:        这不是技术文档,既然学来几招oracle简单招式.就忍不了在人前卖弄几下.纯为茶余饭后与数朋库友的插科 ...

  5. .Net程序员学用Oracle系列(1):导航目录

    本人从事基于 Oracle 的 .Net 企业级开发近三年,在此之前学习和使用的都是 (MS)SQL Server.未曾系统的了解过 Oracle,所以长时间感到各种不习惯.不方便.怪异和不解,常会遇 ...

  6. .Net程序员学用Oracle系列(2):准备测试环境

    <.Net程序员学用Oracle系列:导航目录> 本文大纲 1.创建说明 1.1.为什么要创建的测试环境? 1.2.了解 Oracle 实例的默认用户 2.创建环境 2.1.创建基本环境 ...

  7. .Net程序员学用Oracle系列(6):表、字段、注释、约束、索引

    <.Net程序员学用Oracle系列:导航目录> 本文大纲 1.表 1.1.创建表 1.2.修改表 & 删除表 2.字段 2.1.添加字段 2.2.修改字段 & 删除字段 ...

  8. .Net程序员学用Oracle系列(7):视图、函数、过程、包

    <.Net程序员学用Oracle系列:导航目录> 本文大纲 1.视图 1.1.创建视图 2.函数 2.1.创建函数 2.2.调用函数 3.过程 3.1.创建过程 3.2.调用过程 4.包 ...

  9. .Net程序员学用Oracle系列(8):触发器、任务、序列、连接

    <.Net程序员学用Oracle系列:导航目录> 本文大纲 1.触发器 1.1.创建触发器 1.2.禁用触发器 & 启用触发器 & 删除触发器 2.任务 2.1.DBMS_ ...

随机推荐

  1. 文件上传~Uploadify上传控件

    对于文件上传来说,有很多种实现方式,如传统的表单方式,现在流行的flash方式,甚至还有纯JS方式,之所以有这些方式来实现文件上传,我想主要原因是因为,传统的上传对于大文件支持不够,因为它是单线程同步 ...

  2. Oracle每10天删除数据,并重建索引

    declare datDateFrom date := to_date('2010/08/01 00:00:00','yyyy/mm/dd hh24:mi:ss'); datDateTo date; ...

  3. 08_XML的解析_SAX解析

    [对比SAX解析和DOM解析] * 在使用DOM解析XMl文档时,需要读取整个XML文档,在内存中架构代表整个DOM树的DOcument对象,从而对XML文档进行操作,在这种情况下,如果XML文档特别 ...

  4. .NET和JSON

    JSON(JavaScript Object Notation)已经成为了现在大多数程序间数据交换的存储格式,在很多地方取代了XML文件的位置.JSON实际就是JavaScript的对象数组. .NE ...

  5. ECMAScript布尔操作符

    在ECMAScript中提供了Boolean()转换函数以及三个布尔操作符,这三个布尔操作符分别为逻辑非.逻辑与.逻辑或,这三个操作符通常用作于某些值的求反,比较模式等.学好这一点知识也非常的重要,奠 ...

  6. Markdown:纯文本进行网页排版的简单标记语言

    Markdown http://daringfireball.net/projects/markdown/ 2016-08-03 Markdown是一种标记语言,对纯文本使用简单的标记符号进行网页格式 ...

  7. ASP.NET MVC概述

    原文:http://www.asp.net/mvc/tutorials/older-versions/overview/asp-net-mvc-overview 这篇文章帮助你了解关于ASP.NET ...

  8. 一台Ubuntu server上安装多实例MySQL

    受环境所迫,在一台Ubuntu server上安装多个实例MySQL. 手动安装MySQL 环境:Ubuntu server 11.10 64bit + mysql-5.5.17-linux2.6-x ...

  9. PythonCrawl自学日志(2)

    一.Scrapy环境的安装 1.配套组件的安装 由于开发环境是在VS2015Community中编码,默认下载的python3.5,系统是windows8.1,为此需要安装的组件有如下列表: 所有的组 ...

  10. easy-ui datagrid

    Easy-ui引用    <link href="css/EasyUI/themes/icon.css" rel="stylesheet" type=&q ...