IBM DB2 V9 存储过程异常捕获
------------------------------------------------------------
--脚本说明:测试存储过程异常捕获
--作者:彭建军
--DB2 VERSION : IBM UDB V 9.1
--OS : Windows XP Professional SP2
--最新文档更新时间:2006-8-11 14:13
------------------------------------------------------------
说明:存储过程在执行过程中,不可避免一些出错的情况出现,无论是DBMS本身出错,还是数据的出错都可能引发存储过程调用失败。捕获出错的原因,无疑对增强存储过程的健壮性是有益的。
测试步骤:
Step1:创建测试表 TestTable (见测试表建表脚本)
Step2:创建测试存储过程 TestProc (见存储过程脚本)
Step3:编译存储过程
Step4:插入测试数据,注意插入的数据要使存储过程出错
Step5:执行存储过程 (见测试捕获存储过程错误脚本)
脚本文件附后.
------------------------------------------------------------
--测试表建表脚本
------------------------------------------------------------
--业务表
DROP TABLE TestTable;
CREATE TABLE TestTable
(
T_ID INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY
(START WITH 0, INCREMENT BY 1, NO CACHE ),
T_HalfYear VARCHAR(12) NOT NULL,--格式形如 '2006年上半年'
T_Year SMALLINT,
PRIMARY KEY (T_ID)
);
--存储过程出错日志记录表
DROP TABLE TestLog;
CREATE TABLE TestLog
(
T_ID INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY
(START WITH 0, INCREMENT BY 1, NO CACHE ),
T_Message VARCHAR(100) NOT NULL,--记录存储过程出错信息
PRIMARY KEY (T_ID)
);
------------------------------------------------------------
--存储过程脚本
------------------------------------------------------------
------------------------------------------------------------
--功能: 捕获存储过程异常测试
--作者: 彭建军
--最新更新时间: 2006-8-11 11:16
--编译存储过程 CLP "db2 -td@ -vf TestProc.db2"
--运行存储过程 CLP "db2 call TestProc"
------------------------------------------------------------
--删除该存储过程
DROP PROCEDURE TestProc()@
--创建该存储过程
CREATE PROCEDURE TestProc()
LANGUAGE SQL
BEGIN
--变量定义
DECLARE sqlcode INTEGER DEFAULT 0;
DECLARE sqlstate CHAR(5);
DECLARE v_Message CHAR(100);
--SQL异常处理,插入到错误日志表中
DECLARE exit handler FOR sqlexception
BEGIN
--开始异常处理
VALUES ('存储过程 TestProc 调用失败,SQLCode:' || CHAR(sqlcode) || 'SQLState:' || CHAR(sqlstate))
INTO v_Message;
INSERT INTO TestLog(T_Message)
VALUES (v_Message);
--显式提交事务
COMMIT;
--设置存储过程返回值
SIGNAL SQLSTATE '99999'
SET MESSAGE_TEXT = 'TestProc throw error';
END;
--开始实现业务逻辑
UPDATE TestTable
SET T_Year = INTEGER(SUBSTR(T_HalfYear,1,4));
END@
------------------------------------------------------------
--测试捕获存储过程错误脚本
------------------------------------------------------------
--插入正常的数据,观察存储过程执行情况
INSERT INTO TestTable (T_HalfYear)
VALUES ('2006年上半年');
--执行存储过程
CALL TestProc;
------------------------------------------------------------
--CLP
CALL TestProc
返回状态 = 0
SQLCODE: 0
------------------------------------------------------------
--查询业务表
SELECT * FROM TestTable;
------------------------------------------------------------
T_ID T_HalfYear T_Year
0 2006年上半年 2006
------------------------------------------------------------
--插入脏数据,观察存储过程执行情况
INSERT INTO TestTable (T_HalfYear)
VALUES ('200年上半年');
--执行存储过程
CALL TestProc;
------------------------------------------------------------
--CLP
CALL TestProc
SQL0438N 应用程序发生错误,诊断文本:"TestProc throw error"。
SQLSTATE=99999
SQL0438N 应用程序发生错误,诊断文本:"TestProc throw error"
------------------------------------------------------------
--查询业务表
SELECT * FROM TestTable;
------------------------------------------------------------
T_ID T_HalfYear T_Year
0 2006年上半年 2006
1 200年上半年
------------------------------------------------------------
--查询存储过程错误日志表
SELECT * FROM TestLog;
------------------------------------------------------------
T_ID T_Message
0 存储过程 TestProc 调用失败,SQLCode:-420 SQLState:22018
------------------------------------------------------------
------------------------------------------------------------
--删除测试环境
------------------------------------------------------------
DROP TABLE TestTable;
DROP TABLE TestLog;
DROP PROCEDURE TestProc;
IBM DB2 V9 存储过程异常捕获相关推荐
- ORACLE 存储过程异常捕获并抛出
ORACLE 存储过程异常捕获并抛出 参考文章: (1)ORACLE 存储过程异常捕获并抛出 (2)https://www.cnblogs.com/wdw31210/p/7009731.html 备忘 ...
- oracle异常抛出,ORACLE 存储过程异常捕获并抛出
for tab_name in tables loop execute immediate 'drop table '||tab_name; --此处可能会报错 end loop; 当前情况是,循环表 ...
- Redhat Linux 5.3环境实施DB2 V9.7 HADR
数据库主机:使用VMware workstation 虚拟两台机器 操作系统:Red Hat EL 5.3 数据库软件:DB2 V9.7 虚拟机,操作系统环境安装过程省去. 2.2逻辑拓扑结构 2.3 ...
- 在 AIX 操作系统上如何安装 IBM DB2 9版本的分区环境
DB2 的分区环境适合于统计类和分析的应用,如一般单位的数据仓库系统,在数据仓库系统部署过程中,分区环境的安装往往是项目部署的第一步,在 DB2 的信息中心中有类似于安装方面的资料介绍,但资料比较分散 ...
- 使用IBM InfoSphere Guardium监视和审计IBM DB2 for i数据库活动
总览 InfoSphere Guardium是企业信息数据库审核和保护解决方案,可帮助企业跨各种关系和非关系数据源(例如Oracle,Teradata,IMS,VSAM,Microsoft Share ...
- db2 v9.7 tablespace_state -“表空间状态”监视器元素 0x0400
转载自:https://www.ibm.com/support/knowledgecenter/zh/SSEPGG_9.7.0/com.ibm.db2.luw.admin.mon.doc/doc/r0 ...
- DB2数据库认证系列教程——IBM DB2认证考前必备
DB2数据库认证系列教程--IBM DB2认证考前必备 IBM DB2认证 IBM DB2 认证是求职的敲门砖,也是很多 DB2 爱好者热衷追求的目标.本专题收集整理了IBM DB 2数据库认证相关的 ...
- IBM DB2基础知识学习作业
IBM db2与oracle一样都是后台大型数据库,在我国许多银行的后台服务器都是db2. db2的PENDING状态 backup pending状态:是在修改数据库的日志模式所导致的:解决方法是对 ...
- Spring Boot配置全局异常捕获
1 SpringBoot配置全局的异常捕获 项目的说明 配置thymeleaf作为视图模板 ExceptionController.java模拟测试用 MyAjaxExceptionHandler.j ...
最新文章
- 文本分类step by step(二)
- 16个免费和开源商业智能工具
- sysbench的安装详解
- 查询数据去除后面无用的0_Python数据分析与实战
- WWW 2020 开源论文 | 异构图Transformer
- 10_css控制背景与css精灵.txt
- Java 14:有用的NullPointerException消息
- 在一台机器上运行多个ActiveMQ实例
- Qt3转Qt5(Ui部分)
- matlab 鼠标自定义选中图像的任意区域
- SAP License:GR与IR
- C# - 接口,继承
- Nginx 在 Linux 下安装与搭建 Tomcat 集群
- VS2017 Visual Assist X破解方法
- freeradius mysql web_CentOS7部署FreeRadius3.0及WEB管理界面DaloRadius
- 《大数据之路-阿里巴巴大数据实践》第三章 数据同步
- 读《激荡三十年》有感
- mysql的cnf配置文件全解析
- Chrome 浏览器安装扩展程序
- 随机梯度下降(SGD)与经典的梯度下降法的区别
热门文章
- c语言常考易错知识点,C语言中易错点知识点拾遗
- 2020的一篇鸡鸣狗盗的远程桌面配置文档
- MOCO----Momentum Contrast
- 一般来说人工智能技术包括哪些
- linux下播放wma格式,智能手机什么软件能用播放wma格式的音乐
- 江南Style是怎么把youtobe的计数器弄坏的
- 教学记事:用提问的方式解疑
- 响应式网格(栅格化)布局总结
- luogu P6566 [NOI Online #3 入门组]观星
- python 中文编码类型 gb2312 gb180_常用字符集编码详解:ASCII 、GB2312、GBK、GB18030、UTF-8、unicode...