etl循环跑数据(mysql)

来源:互联网 发布:阿里云ecs ip 编辑:程序博客网 时间:2024/05/20 06:29
DELIMITER $$USE `dw`$$DROP PROCEDURE IF EXISTS `sp_job_etl_loop_tmp`$$CREATE DEFINER=`data`@`%` PROCEDURE `sp_job_etl_loop_tmp`()BEGIN/******************************************************************* Procedure Name:sp_job_etl_loop_tmp* Parameter:* Creator:安* Create Date:2015-06-05* Description:手工循环跑数程序* Version:1.0******************************************************************/-- 需要定义接收游标数据的变量   DECLARE v_date DATE;-- 遍历数据结束标志  DECLARE done INT DEFAULT FALSE;  -- 游标  DECLARE cur CURSOR FOR SELECT DATE FROM dw.t_time_dimension WHERE DATE >= '2015-11-17' AND DATE < '2016-01-01';    DECLARE CONTINUE HANDLER FOR SQLEXCEPTION  BEGIN#获得异常信息GET DIAGNOSTICS @cno = NUMBER;GET DIAGNOSTICS CONDITION @cno @mysql_error = MYSQL_ERRNO,@msg_text = MESSAGE_TEXT,@sql_state = returned_sqlstate;IF @mysql_error IS NOT NULL AND @msg_text IS NOT NULL THEN #日志变量初始化发生异常SET @log_type=0;SET @msg_exception=CONCAT('error_no:',@mysql_error,' sql_state:',@sql_state,' error_text:',@msg_text);#输出异常SELECT @msg_exception;END IF;#存储异常信息CALL sp_write_error('dw.sp_job_etl_loop_tmp',@sql_state,@mysql_error,@msg_text,CONCAT('v_date:',v_date));  END;    -- 将结束标志绑定到游标  DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;  -- 打开游标  OPEN cur;   -- 开始循环 read_loop: LOOP   -- 提取游标里的数据,这里只有一个,多个的话也一样;FETCH cur INTO v_date;   -- 声明结束的时候IF done THENLEAVE read_loop;END IF;   -- 这里做你想做的循环的事件 END LOOP;  -- 关闭游标  CLOSE cur;END$$DELIMITER ;

0 0