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

发布时间:2024年01月19日

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
文章来源:https://blog.csdn.net/weixin_50235904/article/details/135688810
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。