存储过程在运行过程中需要对其做异常处理、原子性等测试
下面是一个原子性测试案例
=====================================
代码区域
=====================================
建表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条数据,那么证明这个存储过程不具有原子性。