DB2存储过程游标
DROP PROCEDURE T_ST_A_ORG_STO;
CREATE PROCEDURE T_ST_A_ORG_STO
BEGIN
DECLARE SQLCODE INTEGER;
DECLARE SQLSTATE CHAR(5);
DECLARE T_ORG_STO_CODE VARCHAR (32);--PK
DECLARE T_TRAN_MODE VARCHAR (32);--PK
DECLARE T_MONTH_ID VARCHAR (6);---PK
DECLARE T_CAR_COUNT DECIMAL (14,2);
DECLARE T_CGT_PUR_QTY DECIMAL (14,2);
DECLARE T_CGT_COUNT DECIMAL (14,2);
DECLARE T_MAXCSJS TIMESTAMP;---抽取数据的最大时间
DECLARE T_MINCSJS TIMESTAMP;---抽取数据的最小时间
DECLARE T_COUNT NUMERIC;
DECLARE CCSJ TIMESTAMP;
DECLARE at_end INT DEFAULT 0;
DECLARE V_SQL1 VARCHAR(1000);
DECLARE V_SQLSTR1 VARCHAR(1000);
-- DECLARE c1 CURSOR FOR T_SQL;
DECLARE c1 CURSOR FOR V_SQL1;
-- DECLARE EXIT HANDLER FOR NOT FOUND
------------------------------------------------------------------------
-- 说明:将数据抽取的范围存入变量
SELECT MAX(LD_CGT_ORDER_HIS.UPDATE_TIME) INTO T_MAXCSJS FROM LD_CGT_ORDER_HIS;
SELECT ST_T_TIME.UPDATETIME INTO T_MINCSJS FROM ST_T_TIME WHERE ST_T_TIME.TABLENAME='ST_A_ORG_STO';
------------------------------------------------------------------------
SET SQLCODE = 0;
SET SQLSTATE='3';
--发车次数:仓库的发货次数,从订单表里取数 ---更新ST_T_TIME 的表的时间
SET V_SQLSTR1='' ||'SELECT '
||' LD_CGT_ORDER_HIS.ORG_STO_CODE '
||' ,LD_CGT_ORDER_HIS.TRAN_MODE '
||' ,to_char(LD_CGT_ORDER_HIS.OUT_DATE, ''YYYYMM'') '
||' ,COUNT(DISTINCT LD_CGT_ORDER_HIS.BATCH_ID) '
||' ,sum(LD_CGT_ORDER_HIS.CGT_PUR_QTY1) '
||' ,count(LD_CGT_ORDER_HIS.ORDER_ID) '
||' FROM LD_CGT_ORDER_HIS '
||' GROUP BY LD_CGT_ORDER_HIS.ORG_STO_CODE '
||' ,LD_CGT_ORDER_HIS.TRAN_MODE '
||' ,LD_CGT_ORDER_HIS.OUT_DATE '
|| '';
--WHERE LD_CGT_ORDER_HIS.UPDATE_TIME<=T_MAXCSJS
-- AND LD_CGT_ORDER_HIS.UPDATE_TIME>T_MINCSJS
PREPARE V_SQL1 FROM V_SQLSTR1;
SET at_end = 1;
OPEN c1;
LOOP
FETCH c1 INTO T_ORG_STO_CODE,T_TRAN_MODE,T_MONTH_ID,T_CAR_COUNT,T_CGT_PUR_QTY,T_CGT_COUNT;
INSERT INTO DB2ADMIN.D_TEST (ID, NAME) VALUES ('4444444443333', '4');
END LOOP;
close c1;
commit;
END;