当前位置:  数据库>oracle

PL/SQL基础-异常处理

    来源: 互联网  发布时间:2017-06-14

    本文导语: 异常处理一、异常的类型 Oracle异常分为两种类型:系统异常、自定义异常。 其中系统异常又分为:预定义异常和非预定义异常。1.预定义异常ORACLE定义了他们的错误编号和异常名字,常见的预定义异常处理Oracle常见的错误 NO_DAT...

异常处理
一、异常的类型
Oracle异常分为两种类型:系统异常、自定义异常。
 其中系统异常又分为:预定义异常和非预定义异常。
1.预定义异常
ORACLE定义了他们的错误编号和异常名字,常见的预定义异常处理Oracle常见的错误

NO_DATA_FOUND SELECT ... INTO ... 时,没有找到数据
DUL_VAL_ON_INDEX 试图在一个有惟一性约束的列上存储重复值
CURSOR_ALREADY_OPEN 试图打开一个已经打开的游标
TOO_MANY_ROWS SELECT ... INTO ... 时,查询的结果是多值
ZERO_DIVIDE 零被整除
2.非预定义异常
ORACLE为它定义了错误编号,但没有定义异常名字。我们使用的时候,先声名一个异常名,
 通过伪过程PRAGMA EXCEPTION_INIT,将异常名与错误号关联起来。

3.自定义异常
 程序员从我们业务角度出发,制定的一些规则和限制。
二、异常处理
PL/SQL中,异常处理按个步骤进行:
 定义异常
 抛出异常
 捕获及处理异常

a.定义异常

exception_name EXCEPTION;

b.抛出异常

RAISE exception_name

c.捕获及处理异常

EXCEPTION
WHEN e_name1 [OR e_name2 ... ] THEN
statements;
WHEN e_name3 [OR e_name4 ... ] THEN
statements;
......
WHEN OTHERS THEN
statements;
END;

--使用预定义的异常
--根据用记输入的商品ID来查商品库存

DECLARE
V_ID ES_PRODUCT.ID%TYPE := &V_ID; --用户输入商品ID
V_STOCKCOUNT ES_PRODUCT.STOCKCOUNT%TYPE; ---库存量
BEGIN
SELECT STOCKCOUNT INTO V_STOCKCOUNT FROM ES_PRODUCT WHERE ID = V_ID;
DBMS_OUTPUT.PUT_LINE('库存量:' || V_STOCKCOUNT);
--判断库存量是否正常
IF V_STOCKCOUNT > 0 THEN
--更新库存,一次买一个减掉一个
UPDATE ES_PRODUCT
SET STOCKCOUNT = STOCKCOUNT - 1
--更新指定的,不然会全部更新
WHERE ID = V_ID;
--提出数据操作
COMMIT;
DBMS_OUTPUT.PUT_LINE('库存更新成功');
ELSIF V_STOCKCOUNT = 0 THEN
DBMS_OUTPUT.PUT_LINE('库存量是0,没有库存了');
ELSE
DBMS_OUTPUT.PUT_LINE('库存异常');
END IF;
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('该商品不存在!');
ROLLBACK;
WHEN TOO_MANY_ROWS THEN
DBMS_OUTPUT.PUT_LINE('该商品存在多个!');
ROLLBACK;
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('发生了其它错误!');
ROLLBACK;
END;

 


--自定义异常
--实现订单删除

 

SELECT * FROM ES_ORDER;
DECLARE
E_NO_RESULT EXCEPTION;
V_ID ES_ORDER.ID%TYPE := &ID;
V_EXCEPTION1 CONSTANT VARCHAR2(50) := '删除数据不成功!';
V_EXCEPTION2 CONSTANT VARCHAR2(50) := '发生了错误!';
BEGIN
DELETE FROM ES_ORDER WHERE ID = V_ID;
IF (SQL%NOTFOUND) THEN
--删除没有执行
RAISE E_NO_RESULT;
END IF;
EXCEPTION
WHEN E_NO_RESULT THEN
DBMS_OUTPUT.PUT_LINE(V_EXCEPTION1);
ROLLBACK;
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(V_EXCEPTION2);
ROLLBACK;
END;

--------------------------------------分割线 --------------------------------------

SQLPLUS spool 到动态日志文件名

Oracle SQLPLUS提示符设置

通过设置SQLPLUS ARRAYSIZE(行预取)加快SQL返回速度

PL/SQL Developer实用技巧分享

--------------------------------------分割线 --------------------------------------


    
 
 

您可能感兴趣的文章:

  • 如何实现连接一次数据库,提交多个sql语句。(sql的批处理)
  • SQL语句中含有乘号报错的处理办法
  • SQL处理包 LocalSQL
  • SqlServer中用exec处理sql字符串中含有变量的小例子
  • sqlserver中通过osql/ocmd批处理批量执行sql文件的方法
  • 初学者问题:标准的sql里有处理日期的函数吗?
  • jsp处理sql语句的问题,急!马上给分!
  • C处理SQL命令字符串的函数哪里有?
  • SQL Server2008数据库导入导出兼容性处理方案
  • 浅析SQL存储过程和事务处理
  • MS SQL Server2014链接到MS SQL Server 2000的解决方案及问题处理
  • 请教:如何用shell实现指定log文件(比如a.log)中的指定内容(SQL_ID和SQL的处理部分)的收集
  • mysql从执行.sql文件时处理n换行的问题
  • sql server日期格式化处理的例子
  • sql数据库批量处理脚本
  • SQL对时间处理的语句小结
  • SQL 重复记录问题的处理方法小结
  • SQL处理多级分类,查询结果呈树形结构
  • sql server 存储过程的异常处理
  • SQL学习笔记七函数 数字,日期,类型转换,空值处理,case
  • SQL学习笔记一SQL基础知识
  • Oracle SQL基础知识
  • 关于SQL 存储过程入门基础(基础知识)
  • 关于SQL 存储过程入门基础(流程控制)
  • 学习sql基础算法的三个例子
  • T-SQL学习之一 T-SQL基础
  • SQL优化基础 使用索引(一个小例子)
  • SQL语言查询基础:连接查询 联合查询 代码
  • 在安装了Sql2000的基础上安装Sql2005的详细过程 图文
  • 经典SQL语句大全-基础篇
  • SQL基础语句(数据库函数,时间函数,Union,Case,索引等)
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • PL/SQL Developer 10.0发布
  • Toby's PL/SQL Editor
  • java开发知识 iis7站长之家
  • Oracle中在pl/sql developer修改表的2种方法
  • 用oracle pl/sql 从A unix机器,去读取B unix机器上的一个文件,怎么实现?
  • oracle中如何用PL/SQL打开一个指定的库,并在屏幕上列出库中的所有表?
  • 解析PL/SQL Developer导入导出数据库的方法以及说明
  • Oracle中PL/SQL中if语句的写法介绍
  • 64位win7下pl/sql无法连接oracle解决方法
  • PL/SQL编程经验小结开发者网络Oracle
  • http://www.ddtong.com/Sql.pl?nId=871609&csId=340387&cName=%bd%af%d3%ee%d6%c7,name如何转化成中文(直接java代码)
  • 在Oracle PL/SQL中游标声明中表名动态变化的方法
  • Oracle PL/SQL入门案例实践
  • Oracle使用PL/SQL操作COM对象
  • Oracle中的存储过程在pl/sql和java中如何调用
  • Oracle数据库编写PL/SQL代码经验谈
  • PL/SQL Number数字类型函数
  • PL/SQL Dev连接Oracle弹出空白提示框的解决方法分享
  • ORACLE PL/SQL 触发器编程篇介绍
  • [Oracle新手教程] 用PL/SQL画直方图
  • Oracle PL/SQL入门慨述
  • java命名空间java.sql接口statement的类成员方法: executeupdate定义及介绍
  • 请问,这是什么错误!java.sql.SQLException: [Microsoft][ODBC SQL Server Driver][Named Pipes]??????? SQL Server?虽然分少,但一定给,只要您是前5名回复者中最好的以为!
  • java命名空间java.sql接口connection的类成员方法: nativesql定义及介绍
  • SQL查询分析工具 SQL Workbench/J
  • java命名空间java.sql接口preparedstatement的类成员方法: executeupdate定义及介绍
  • oracle导出sql语句的结果集和保存执行的sql语句(深入分析)
  • java命名空间java.sql接口rowid的类成员方法: getbytes定义及介绍
  • SQL Server统计SQL语句执行时间的脚本
  • java命名空间java.sql接口ref的类成员方法: getbasetypename定义及介绍
  • SQL客户端软件 PKLite SQL Client


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,