DB2\MYSQL 循环指定时间范围内的所有数据的存储过程

本文对比了MySQL和DB2中如何使用存储过程实现按日期范围循环执行的任务,包括设置变量、参数化查询以及事务处理。
摘要由CSDN通过智能技术生成

MYSQL

CREATE DEFINER=`mbit`@`%` PROCEDURE `tsky-ads`.`P_JOB_LOOP`(
-- 存储过程名称,例如GBSC00.T_SBZT18_ADS18
IN PROCEDURE_NAME VARCHAR(100),
-- 跑数开始时间 yyyymmdd
IN START_DATE VARCHAR(20),
-- 跑数结束时间 yyyymmdd
IN END_DATE VARCHAR(20) )
BEGIN


   -- 跑数时间
DECLARE V_UPDATE VARCHAR(20);

-- 跑数存储过程
-- DECLARE V_PROCEDURES VARCHAR(500);

-- 开启事务
START TRANSACTION;

SET V_UPDATE = START_DATE;


WHILE (V_UPDATE <= END_DATE) DO 
SET @V_PROCEDURES = CONCAT('CALL ' , PROCEDURE_NAME , '(' , V_UPDATE, ')');
-- SELECT @V_PROCEDURES;
PREPARE I_PARAMETER_DAY_STMT FROM @V_PROCEDURES;
EXECUTE I_PARAMETER_DAY_STMT;

COMMIT;

SET V_UPDATE =DATE_FORMAT(DATE_ADD(DATE_FORMAT(V_UPDATE,'%Y-%m-%d'), INTERVAL 1 DAY),'%Y%m%d');

END WHILE;

END

DB2

CREATE OR REPLACE PROCEDURE GBSC00.T_JOB_LOOP(
--存储过程名称,例如GBSC00.T_SBZT18_ADS18
IN PROCEDURE_NAME VARCHAR(100),
--跑数开始时间 yyyymmdd
IN START_DATE VARCHAR(20),
--跑数结束时间 yyyymmdd
IN END_DATE VARCHAR(20) )
--实现存储过程循环跑数,该存储过程只能入参一个时间
--实例GBSC00.T_SBZT18_ADS18(:IN_TIME)
--

SPECIFIC T_JOB_LOOP
LANGUAGE SQL
NOT
DETERMINISTIC EXTERNAL ACTION
MODIFIES SQL DATA CALLED ON
NULL INPUT
INHERIT SPECIAL REGISTERS
OLD SAVEPOINT LEVEL
BEGIN
   --跑数时间
DECLARE V_UPDATE VARCHAR(20);

--跑数存储过程
DECLARE V_PROCEDURES VARCHAR(500);


SET V_UPDATE = START_DATE;


WHILE (V_UPDATE <= END_DATE) DO SET V_PROCEDURES = '
CALL ' || PROCEDURE_NAME || '  (' || V_UPDATE || ') ';


EXECUTE IMMEDIATE V_PROCEDURES;


COMMIT;


SET V_UPDATE = TO_CHAR(TO_DATE( V_UPDATE, 'yyyymmdd')+ 1, 'yyyymmdd');

END WHILE;

END
  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值