DB2测试存储过程的原子性

时间:2022-06-01 22:19:17

存储过程在运行过程中需要对其做异常处理、原子性等测试

下面是一个原子性测试案例

=====================================

代码区域

=====================================

建表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 '';
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='';
RETURN ;
END IF; INSERT INTO tb_2 values(1,'插入1'); IF SQL_CODE=0 OR SQL_CODE=100 THEN
SET P_OUT_FLAG= '';
ELSE SET P_OUT_FLAG=SQL_CODE;
ROLLBACK;
END IF; END P1;

执行存储过程2次,查询2个表中的数据,如果表tb_1有2条数据,那么证明这个存储过程不具有原子性。