mysql 存储过程动态sql

DROP PROCEDURE IF EXISTS PRO_STA_SYSTEM_ORDER_STATE;
DELIMITER //
CREATE DEFINER=`root`@`%` PROCEDURE `PRO_STA_SYSTEM_ORDER_STATE`(OUT O_RESULT_CODE CHAR(4))
    COMMENT '系统订单实时统计'
BEGIN
DECLARE DONE INT DEFAULT TRUE;-- 定义一个标识为true
DECLARE YEAR_MONTH_STR VARCHAR(10);-- 当前年月

DECLARE CONTINUE HANDLER FOR NOT FOUND,SQLEXCEPTION  SET DONE = FALSE;-- 异常的情况标识为false

IF month(curdate()) <= 10 THEN
   SET YEAR_MONTH_STR = CONCAT(year(curdate()),0,month(curdate()));-- 例如:201703
ELSE
   SET YEAR_MONTH_STR = CONCAT(year(curdate()),month(curdate()));-- 例如:201710
END IF;
#到t_company_flows_order_*_*表查寻包括:今日总订单量,成功订单量,流量订单量,流量成功订单量,话费订单量,话费成功订单量,系统卡单数量(流量贝贝平台总卡单数量)
SET @asql = CONCAT('SELECT COUNT(1) TOTAL_ORDER_COUNT,
                                        COUNT(CASE WHEN  status  = ''2'' then 1 else null end ) TOTAL_SUCCESS_ORDER_COUNT,
                                        COUNT(CASE WHEN  businessType  = 2 then 1 else null end ) FLOW_ORDER_COUNT,
                    COUNT(CASE WHEN  businessType  = 2 AND status = ''2'' then 1 else null end ) FLOW_SUCCESS_ORDER_COUNT,
                                        COUNT(CASE WHEN  businessType  = 1 then 1 else null end ) BILL_ORDER_COUNT,
                    COUNT(CASE WHEN  businessType  = 1 AND status = ''2'' then 1 else null end ) BILL_SUCCESS_ORDER_COUNT,
                    COUNT(CASE WHEN  status in(''1'',''3'') then 1 else null end) SYSTEM_STUCK_ORDER_COUNT  INTO @TOTAL_ORDER_COUNT,@TOTAL_SUCCESS_ORDER_COUNT,@FLOW_ORDER_COUNT,
                    @FLOW_SUCCESS_ORDER_COUNT,@BILL_ORDER_COUNT,@BILL_SUCCESS_ORDER_COUNT,@SYSTEM_STUCK_ORDER_COUNT',' FROM (',
                                                       'SELECT businessType,status FROM t_company_flows_order_',YEAR_MONTH_STR,'_01 WHERE createDate >= date(now()) and createDate < date(date_add(now(),interval 1 day)) ',
                                            'UNION ALL SELECT businessType,status FROM t_company_flows_order_',YEAR_MONTH_STR,'_02 WHERE createDate >= date(now()) and createDate < date(date_add(now(),interval 1 day)) ',
                                            'UNION ALL SELECT businessType,status FROM t_company_flows_order_',YEAR_MONTH_STR,'_03 WHERE createDate >= date(now()) and createDate < date(date_add(now(),interval 1 day)) ',
                                            'UNION ALL SELECT businessType,status FROM t_company_flows_order_',YEAR_MONTH_STR,'_04 WHERE createDate >= date(now()) and createDate < date(date_add(now(),interval 1 day)) ',
                                             'UNION ALL SELECT businessType,status FROM t_company_flows_order_',YEAR_MONTH_STR,'_05 WHERE createDate >= date(now()) and createDate < date(date_add(now(),interval 1 day)) ',
                                            'UNION ALL SELECT businessType,status FROM t_company_flows_order_',YEAR_MONTH_STR,'_06 WHERE createDate >= date(now()) and createDate < date(date_add(now(),interval 1 day)) ',
                                            'UNION ALL SELECT businessType,status FROM t_company_flows_order_',YEAR_MONTH_STR,'_07 WHERE createDate >= date(now()) and createDate < date(date_add(now(),interval 1 day)) ',
                                            'UNION ALL SELECT businessType,status FROM t_company_flows_order_',YEAR_MONTH_STR,'_08 WHERE createDate >= date(now()) and createDate < date(date_add(now(),interval 1 day)) ',
                                            'UNION ALL SELECT businessType,status FROM t_company_flows_order_',YEAR_MONTH_STR,'_09 WHERE createDate >= date(now()) and createDate < date(date_add(now(),interval 1 day)) ',
                                             'UNION ALL SELECT businessType,status FROM t_company_flows_order_',YEAR_MONTH_STR,'_10 WHERE createDate >= date(now()) and createDate < date(date_add(now(),interval 1 day)) ) tbl');
 prepare sqlstmt from @asql;
 execute sqlstmt;
#到order_reau_record_*_*表包括:回调平均成功率,上游渠道卡单数(卡在上游渠道的订单数量),回调平均时长(毫秒)
SET @bsql = CONCAT('SELECT  IFNULL(ROUND(COUNT(CASE WHEN  CALLBACK_STATUS  = ''1'' then 1 else null end )/count(1),2),0) CALLBACK_SUCCESS_AVG,
                                                COUNT(CASE WHEN  REQUEST_STATUS  = ''1'' AND CALLBACK_STATUS = ''0'' then 1 else null end ) REAU_STUCK_ORDER_COUNT,
                                                IFNULL(ROUND(AVG(CALLBACK_TIME),0),0)  CALLBACK_TIMES_AVG  INTO @CALLBACK_SUCCESS_AVG,@REAU_STUCK_ORDER_COUNT,@CALLBACK_TIMES_AVG',' FROM (',
                                                      'SELECT CALLBACK_STATUS,REQUEST_STATUS,CALLBACK_TIME FROM order_reau_record_',YEAR_MONTH_STR,'_01 WHERE DATE_CREATE >= date(now()) and DATE_CREATE < date(date_add(now(),interval 1 day)) ',
                                            'UNION ALL SELECT CALLBACK_STATUS,REQUEST_STATUS,CALLBACK_TIME FROM order_reau_record_',YEAR_MONTH_STR,'_02 WHERE DATE_CREATE >= date(now()) and DATE_CREATE < date(date_add(now(),interval 1 day)) ',
                                            'UNION ALL SELECT CALLBACK_STATUS,REQUEST_STATUS,CALLBACK_TIME FROM order_reau_record_',YEAR_MONTH_STR,'_03 WHERE DATE_CREATE >= date(now()) and DATE_CREATE < date(date_add(now(),interval 1 day)) ',
                                            'UNION ALL SELECT CALLBACK_STATUS,REQUEST_STATUS,CALLBACK_TIME FROM order_reau_record_',YEAR_MONTH_STR,'_04 WHERE DATE_CREATE >= date(now()) and DATE_CREATE < date(date_add(now(),interval 1 day)) ',
                                            'UNION ALL SELECT CALLBACK_STATUS,REQUEST_STATUS,CALLBACK_TIME FROM order_reau_record_',YEAR_MONTH_STR,'_05 WHERE DATE_CREATE >= date(now()) and DATE_CREATE < date(date_add(now(),interval 1 day)) ',
                                            'UNION ALL SELECT CALLBACK_STATUS,REQUEST_STATUS,CALLBACK_TIME FROM order_reau_record_',YEAR_MONTH_STR,'_06 WHERE DATE_CREATE >= date(now()) and DATE_CREATE < date(date_add(now(),interval 1 day)) ',
                                            'UNION ALL SELECT CALLBACK_STATUS,REQUEST_STATUS,CALLBACK_TIME FROM order_reau_record_',YEAR_MONTH_STR,'_07 WHERE DATE_CREATE >= date(now()) and DATE_CREATE < date(date_add(now(),interval 1 day)) ',
                                            'UNION ALL SELECT CALLBACK_STATUS,REQUEST_STATUS,CALLBACK_TIME FROM order_reau_record_',YEAR_MONTH_STR,'_08 WHERE DATE_CREATE >= date(now()) and DATE_CREATE < date(date_add(now(),interval 1 day)) ',
                                            'UNION ALL SELECT CALLBACK_STATUS,REQUEST_STATUS,CALLBACK_TIME FROM order_reau_record_',YEAR_MONTH_STR,'_09 WHERE DATE_CREATE >= date(now()) and DATE_CREATE < date(date_add(now(),interval 1 day)) ',
                                            'UNION ALL SELECT CALLBACK_STATUS,REQUEST_STATUS,CALLBACK_TIME FROM order_reau_record_',YEAR_MONTH_STR,'_10 WHERE DATE_CREATE >= date(now()) and DATE_CREATE < date(date_add(now(),interval 1 day)) ) tb1');
prepare sqlstmt from @bsql;
execute sqlstmt;

#保存到sta_system_order_state系统订单实时统计表中
INSERT INTO sta_system_order_state(DATE_CREATED,TOTAL_ORDER_COUNT,TOTAL_SUCCESS_ORDER_COUNT,FLOW_ORDER_COUNT,FLOW_SUCCESS_ORDER_COUNT,BILL_ORDER_COUNT,BILL_SUCCESS_ORDER_COUNT,CALLBACK_SUCCESS_AVG,
                                  SYSTEM_STUCK_ORDER_COUNT,REAU_STUCK_ORDER_COUNT,CALLBACK_TIMES_AVG) VALUES
                                                                     (NOW(),@TOTAL_ORDER_COUNT,@TOTAL_SUCCESS_ORDER_COUNT,@FLOW_ORDER_COUNT,@FLOW_SUCCESS_ORDER_COUNT,@BILL_ORDER_COUNT,@BILL_SUCCESS_ORDER_COUNT,@CALLBACK_SUCCESS_AVG,
                                                                     @SYSTEM_STUCK_ORDER_COUNT,@REAU_STUCK_ORDER_COUNT,@CALLBACK_TIMES_AVG);
IF DONE THEN
   SET O_RESULT_CODE = '0000';-- 成功 '0000'
ELSE
   SET O_RESULT_CODE = '9999';-- 失败 '9999'
END IF;

END//

DELIMITER ;



总结:通过into关键字可以将字段放入临时变量中,然后就可以操作了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值