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条数据,那么证明这个存储过程不具有原子性。 

posted @ 2016-12-08 11:08  OLIVER_QIN  阅读(710)  评论(0编辑  收藏  举报