DB2下写的一个存储过程

PS:存过知识可参考:http://wenku.baidu.com/view/a323ea32f111f18583d05aa5.html 写的挺不错

此存过,主要纪念前面老久的CURSOR错误。。

DROP PROCEDURE CISYS.GET03;
CREATE PROCEDURE CISYS.GET03
 ( 
  INOUT "SUCCSFLAG" VARCHAR(30)
 ) 
  LANGUAGE SQL
  NOT DETERMINISTIC
  CALLED ON NULL INPUT
  EXTERNAL ACTION
  OLD SAVEPOINT LEVEL
  MODIFIES SQL DATA
  INHERIT SPECIAL REGISTERS
  
  BEGIN
 DECLARE v_sTaskID SMALLINT;
 DECLARE v_sDptCde VARCHAR(30);


 DECLARE     SQLCODE INTEGER DEFAULT 0;
 DECLARE     v_sSQLCODE VARCHAR(5);
 DECLARE     v_nCount INTEGER DEFAULT 0;
 SET SUCCSFLAG    = '0';
   
  BEGIN
   DECLARE cur_dltaxvhl cursor with hold for
  select N_TASK_ID,C_DPT_CDE from t_dltax_task with ur;

IF SQLCODE <>0 THEN
  SET SUCCSFLAG = '-1';
  RETURN;
END IF;

OPEN cur_dltaxvhl;
FETCH  cur_dltaxvhl INTO v_sTaskID,v_sDptCde;
IF SQLCODE <>0 THEN
  SET v_sSQLCODE = TO_CHAR(SQLCODE);
    SET SUCCSFLAG = '-1 ---' || v_sSQLCODE;
    CLOSE cur_dltaxvhl;
    RETURN;
    END IF;
    loop_dltaxvhl: LOOP
 
  INSERT INTO T_TEST(N_TASK_ID, C_DPT_CDE) VALUES(v_sTaskID,v_sDptCde);
      if SQLCODE <> 0 then
SET SUCCSFLAG = '-2' || CHAR(SQLCODE);
             rollback;
CLOSE cur_dltaxvhl;
             return;
         end if;
FETCH  cur_dltaxvhl INTO v_sTaskID,v_sDptCde;
IF SQLCODE <> 0 THEN
  SET SUCCSFLAG = '-3' || CHAR(SQLCODE);
  LEAVE loop_dltaxvhl;   --- 之前主要是忘记这个了。。 导致死循环
END IF;
  END LOOP; --loop_dltaxvhl;
  commit;
 CLOSE cur_dltaxvhl;
END;
 END;


你可能感兴趣的:(DB2下写的一个存储过程)