DB2测试存储过程的原子性
存储过程在运行过程中需要对其做异常处理、原子性等测试
下面是一个原子性测试案例
=====================================
代码区域
=====================================
建表SQL:
DROP TABLE DB2ADMIN.TB_1; CREATE TABLE DB2ADMIN.TB_1 ( ID INTEGER, NAME VARCHAR (100) ) IN USERSPACE1; DROP TABLE DB2ADMIN.TB_2; CREATE TABLE DB2ADMIN.TB_2 ( ID INTEGER NOT NULL, NAME VARCHAR (100), PRIMARY KEY (ID) ) IN USERSPACE1;
存储过程
CREATE PROCEDURE TST_PRO( OUT P_OUT_FLAG VARCHAR(10) ) SPECIFIC TST_PRO LANGUAGE SQL NOT DETERMINISTIC CALLED ON NULL INPUT EXTERNAL ACTION OLD SAVEPOINT LEVEL MODIFIES SQL DATA INHERIT SPECIAL REGISTERS P1:BEGIN --======================声明异常 存储过程 返回0为成功 返回1为失败 DECLARE SQL_CODE INTEGER DEFAULT 0; DECLARE SQLSTATE CHAR(5) DEFAULT '00000'; DECLARE SQLCODE INTEGER DEFAULT 0; DECLARE SQLMSG VARCHAR(400) DEFAULT ''; declare V_COUNT INTEGER ; DECLARE CONTINUE HANDLER FOR NOT FOUND, SQLEXCEPTION ,SQLWARNING BEGIN SET SQL_CODE=SQLCODE; IF SQL_CODE=-803 THEN SET P_OUT_FLAG=SQL_CODE; END IF; END; INSERT INTO tb_1 values(1,'插入'); GET DIAGNOSTICS V_COUNT=ROW_COUNT; IF V_COUNT<1 THEN ROLLBACK; SET p_OUT_FLAG='1'; RETURN ; END IF; INSERT INTO tb_2 values(1,'插入1'); IF SQL_CODE=0 OR SQL_CODE=100 THEN SET P_OUT_FLAG= '0'; ELSE SET P_OUT_FLAG=SQL_CODE; ROLLBACK; END IF; END P1;
执行存储过程2次,查询2个表中的数据,如果表tb_1有2条数据,那么证明这个存储过程不具有原子性。
作者:奔跑的金鱼
声明:书写博客不易,转载请注明出处,请支持原创,侵权将追究法律责任
个性签名:人的一切的痛苦,本质上都是对自己无能的愤怒
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!