您的位置:首页 > 数据库 > MySQL

etl循环跑数据(mysql)

2016-01-26 14:11 555 查看
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 ;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: