概述
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 THEN
LEAVE read_loop;
END IF;
-- 这里做你想做的循环的事件
END LOOP;
-- 关闭游标
CLOSE cur;
END$$
DELIMITER ;
最后
以上就是舒服人生为你收集整理的etl循环跑数据(mysql)的全部内容,希望文章能够帮你解决etl循环跑数据(mysql)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复