`

Oracle数据库之PLSQL异常

阅读更多
--============PLSQL==异常处理=============================
-- Exception是一种PL/SQL标识符,当运行的PL/SQL块出现错误或警告,则会触发异常处理。
--PLSQL错误
----编译时错误
----运行时错误

--运行时错误
---- oracle错误 (ora-xxx)
---- PL/SQL运行错误
---- 用户定义的条件

--==========ORACLE错误处理机制===============
---- 在程序运行期间的错误对应一个异常Exception.
---- 当错误产生时抛出相应的异常.并被异常处理器捕获,
---- 程序控制权传递给异常处理器,由异常处理器来处理运行时错误.

---=========异常的触发类型==================
--隐士触发
----- oracle预定义异常
----- 非oracle预定义异常
--显式触发
----- 用户自定义异常

-- ========异常运行机制=====================
--异常捕获通过异常处理器实现,它是程序的一个独立部分.
--把错误与程序的其它部分分离开来,使程序逻辑更加易于理解.

--当异常产生时,控制权立即转移到异常处理器,一旦执行控制权被转移到异常处理器,

 
--就无法再回到本语句块的可执行部分,如果没有异常部分,则被传播到外层语句块.

 

--==异常处理语法:
exception
 when 异常名字1 then 处理异常语句1;
 when 异常名字2 or  异常名字3  then 处理异常语句2;
 when others then 其它处理3;
-- 允许有多个异常处理器
end;

--Exception关键字:标识异常处理的开始区域.
--一个异常处理器可以捕获多个异常,只需要在when子句中用or连接即可
--一个异常只能被一个异常处理器捕获,并进行处理.
-- others异常处理器总是作为异常处理最后一个异常处理器 ,
-- 负责处理那些没有被其他异常处理器捕获的异常.

--========Oracle预定义错误的捕获============
--no_data_found
--too_many_rows
--ZERO_DIVIDE

--演示 ORACLE预定义异常捕获的语法 ZERO_DIVIDE异常==========
declare
	v_id number(4) ;
begin
	select deptno into v_id from emp where 1= 2;--no_data_found Exception
	--select deptno into v_id from emp where 1= 1/0;--ZERO_DIVIDE Exception
	Exception
		when ZERO_DIVIDE 
			then dbms_output.put_line('ZERO_DIVIDE Exception');	
		when no_data_found
			then dbms_output.put_line('no_data_found Exception');
		when others 
			then	dbms_output.put_line(' Exception');
end;

-- 演示关联数组的异常
declare
	type ind_tab_array is 
		table of number index by binary_integer;
	ind_tab ind_tab_array; --自动初始化null
begin
	--ind_tab(null) :=3 VALUE_ERROR
	if(ind_tab(1)) =1 --NO_DATA_FOUND
		then dbms_output.put_line(ind_tab(1));
	end if;
	Exception
		when VALUE_ERROR
			then dbms_output.put_line('VALUE_ERROR');
		when NO_DATA_FOUND
			then dbms_output.put_line('NO_DATA_FOUND');
end;

--===============非预定义异常==============
--非预定义异常:某些异常在oracle中没有定义名词,只有一个ORA-xxxx,
SQL> insert into emp(empno ) values (null);
insert into emp(empno ) values (null)
                                *
第 1 行出现错误:
ORA-01400: 无法将 NULL 插入 ("SCOTT"."EMP"."EMPNO")

--我们把这样的异常定义一个名字(将异常名与异常编号相关联),称之为非预定义异常
--使用的基本过程
    --a.定义一个异常名 (declare)
    --b.将异常名与异常编号相关联(associate)
    --c.在异常处理部分捕捉并处理异常(reference)
declare
	e_key Exception;--定义
	pragma exception_init(e_key,-01400);--绑定关联
begin
	insert into emp(empno ) values (null);
	Exception
		when e_key
			then dbms_output.put_line('e_key');
		when others
			then dbms_output.put_line('unknow exception');
end;

--========用户自定义异常============
--自定义异常与Oracle错误没有任何关系,有开发人员为特定情况所定义的例外
--使用的基本过程
	--a.用户自定义异常必须在声明部分进行声明
	--b.当异常发生时,系统不能自动触发,需要使用Raise语句触发
	--c.在异常处理部分捕获并处理异常
	
--上述异常改成 用户自定义异常
declare
	e_key Exception ;
	empno number(4);
begin
	if empno is null 
	   then Raise e_key; --如果是null,触发异常
	end if;
	empno :=8080;
	insert into emp(empno) values (empno);
	
	Exception
		when e_key 
			then dbms_output.put_line('e_key');
	when others
		        then dbms_output.put_line('exception');
end;



 

  • 大小: 38.1 KB
  • 大小: 44.8 KB
分享到:
评论

相关推荐

    大型数据库系统技术课程 Oracle数据库OceanBase数据库知识教程 PLSQL介绍全部课程PPT课件共12个章节.rar

    2-2-Oracle数据库知识 PLSQL介绍 共69页.ppt 3-1-Oracle数据库知识 PLSQL控制结构 共25页.ppt 4-1-异常处理 共87页.ppt 4-2-过程与函数 共62页.ppt 4-3-在PLSql中使用sql 共98页.ppt 5-1-DistributedDatabaseSystem...

    大型数据库系统技术课程 2-2-Oracle数据库知识 PLSQL介绍 共69页.ppt

    结构化查询语言(Structured Query Language,简称SQL)是用来访问关系型数据库一...PL/SQL是ORACLE在标准SQL语言上的过程性扩张,允许嵌入SQL语句,允许定义常量和变量,允许过程语言结果,允许使用异常处理ORACLE错误。

    Oracle数据库学习指南

    15.PLSQL异常处理初步 16.SQL语句性能调整原则 17.创建和使用分区的表 18.基于成本的优化器一般错误概念和问题 19.Delphi 3_0中连接数据库的三种方式 20.远程数据库的访问 21.监控数据库性能的SQL 22...

    Oracle数据库SQL和PL SQL实例教程 高继民(ppt)

    oracle数据库ppt 第1章 关系数据库与SQL语言环境 第2章 数据查询 第3章 数据操作 第4章 表和视图 第5章 其他数据库对象 第6章 SQL基础 第7章 游标和异常处理 第8章 存储过程、函数和包 第9章 触发器 第10章 数据库...

    oracle数据库详解PPT

    oracle数据库安装.ppt oracle数据库创建.ppt oracle数据库对象.ppt oracle异常及触发器.ppt plsql过程及函数.ppt PLSQL介绍.ppt PLSQL控制结构.ppt PLSQL中使用SQL.ppt sql基本命令.ppt 锁和表分区.ppt ...

    Oracle PL/SQL异常处理方法解析

    Oracle数据库中的异常:没有异常的转移,因为没有受检异常和非受检异常得区分。 1.异常的产生: 2.异常的处理: declare  –变量定义,初始化赋值。 begin  –变量的赋值,函数调用,if,while等。 ...

    Oracle_PLSQL语言基础

    PL/SQL是ORACLE对标准数据库语言的扩展,ORACLE公司已经将PL/SQL整合到ORACLE 服务器和其他工具中了,近几年中更多的开发人员和DBA开始使用PL/SQL,本文将讲述PL/SQL基础语法,结构和组件、以及如何设计并执行一个PL...

    ORACLE SQL PLSQL

    1-1 pl/sql可以做的工作: 1. 用pl/sql的存储过程和数据库触发器实现至关重要的商业规则。...7.plsql是oracle数据库产品的内置语言,不是一个孤立的语言。 8.是一种高性能的语言。 9.pl/sql运行过程

    Oracle数据库SQL和PL SQL实例教程PPT(推荐)

    第1章 关系数据库与SQL语言环境.ppt 第2章 数据查询.ppt 第3章 数据操作.ppt ...第6章 PLSQL基础.ppt 第7章 游标和异常处理.ppt 第8章 存储过程、函数和包.ppt 第9章 触发器.ppt 第10章 数据库开发应用实例.ppt

    PLSQL工具:PLSQL Developer,该安装包适合32位的Oracle

    PL/SQL的基本单位叫做块,由三个部分组成:一个声明部分,一个执行部分和异常处理部分。 因为PL/SQL允许混合SQL声明和过程结构,因此可以在将声明发送到甲骨文系统去执行之前使用PL/SQL区段和副程序来组合SQL声明,...

    Oracle_PLSQL测试题与答案(绝对经典)

    Oracle_PLSQL测试题与答案(绝对经典)

    Oracle基本PLSQL的使用实例详解

    Oracle基本PLSQL的使用实例详解 PL/SQL 块是在 SQL 语言之上发展起来的一种应用,可以集中的处理各种复杂的 SQL 操 作。 组成: DECLARE: 声明部分 BEGIN 编写主题 EXCEPTION 捕获异常 END; 1.一个简单的PL/...

    Oracle PLSQL编程-经典试题

    里面有orcale plsql经典试题,视图,存储过程,游标,包,异常处理。

    Oracl技术资料(EBook)

    15.PLSQL异常处理初步 16.SQL语句性能调整原则 17.创建和使用分区的表 18.基于成本的优化器一般错误概念和问题 19.Delphi 3_0中连接数据库的三种方式 20.远程数据库的访问 21.监控数据库性能的SQL 22.简单...

    Oracle11gPLSQLProgramming

     ·使用PLSQL_WARNINGS 和异常处理程序标识和消除错误;  ·使用函数、过程、包、集合和触发器;  ·定义和部署varray 、嵌套表和联合数组数据类型;  ·处理外部例程、对象类型、大对象和安全文件;  ·使用...

    Oracle PL SQL程序设计 上 第五版(代码示例)

    《oracle pl/sql程序设计(第5版)》基于oracle数据库11g,从pl/sql编程、pl/sql程序结构、pl/sql程序数据、pl/sql中的sql、pl/sql应用构建、高级pl/sql主题6个方面详细系统地讨论了pl/sql以及如何有效地使用它。...

    plsql_oracle 编程

    第一章 PL/SQL 程序设计简介 4 §1.2 SQL与PL/SQL 4 §1.2.1 什么是PL/SQL? 4 §1.2.1 PL/SQL的好处 4 §1.2.2 PL/SQL 可用的SQL语句 5 §1.3 运行PL/SQL程序 5 ...§8.5 数据库触发器的应用举例 13

    Oracle-PLSQL-编程语法详解-触发器.docx

    学习永无止境:触发器是许多关系数据库系统都提供的一项技术。在 ORACLE 系统里,触发器类似过程和函数,都有声明,执行和异常处理过程的 PL/SQL 块。

    Oracle 从入门到精通视频教程(11G版本)(ppt)

    第1章-Oracle 11g数据库简介 认识Oracle 11g 回忆Oracle的产品版本 学习Oracle 11g的新特性 第2章-Oracle 11g的安装与测试 能够使用Oracle 11g的基本条件 在Windows 2003上安装Oracle 11g 移除Oracle 11g ...

    PLSQL安装包:PLSQL Developer 14.rar

    PL/SQL的基本单位叫做块,由三个部分组成:一个声明部分,一个执行部分和异常处理部分。 因为PL/SQL允许混合SQL声明和过程结构,因此可以在将声明发送到甲骨文系统去执行之前使用PL/SQL区段和副程序来组合SQL声明,...

Global site tag (gtag.js) - Google Analytics