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 ;
相关文章推荐
- MySQL中优化常用的查询sql语
- MySQL中优化常用的查询sql语
- mysql join on 联表
- Mysql手动安装
- MySQL DBA 成长之路
- 如何在MySQL客户端Navicat 上创建存储过程返回结果集
- mysql创建存储过程(根据时间字段来更新数据)
- Mysql新建用户和数据库授权
- MySql LeftJoin On 与 Where的差异
- mysql创建用户、授权[转]
- MySQL分区技术 (一)
- MySQL数据库学习笔记(十)----JDBC事务处理、封装JDBC工具类
- MySQL数据库学习笔记(九)----JDBC的ResultSet接口(查询操作)、PreparedStatement接口重构增删改查(含SQL注入的解释)
- MySQL:MySQL日期数据类型、MySQL时间类型使用总结
- MySQL数据库学习笔记(八)----JDBC入门及简单增删改数据库的操作
- mysql随机从一个表中获取一条记录
- MySQL分区的限制(最多有多少个分区)
- MySQL 语句大全:创建、授权、查询、修改等
- MySql ERROR 1045 (28000): Access denied 错误
- mysql如何防止插入重复数据?