DROP PROCEDURE IF EXISTS `ChannelStopHourLimited_3Minute` ;
DELIMITER $$
CREATE PROCEDURE `ChannelStopHourLimited_3Minute`()
BEGIN
/*
@cdate:
功能:XXXXXXXXX
步骤:
相关表
执行频率:每三分钟一次, 执行时间:0:00 至23:59
*/
-- 遇到SQL异常后执行回滚
DECLARE prost datetime;
-- DECLARE EXIT HANDLER FOR SQLEXCEPTION ROLLBACK;
-- 将存储过程信息插入到 EventExecuteLog表
SET prost = NOW();
INSERT INTO EventExecuteLog VALUES ('ChannelStopHourLimited_3Minute',prost,'0000-00-00 00:00:00','fail');
-- 开启事务
-- START TRANSACTION;
SET @ChannelIDs = '';
-- 1 获取全部超额的通道
SELECT @ChannelIDs := CONCAT(@ChannelIDs, b.ChannelID, ',') FROM Channel c INNER JOIN ChannelCycleBilling b
ON c.ChannelSno=b.ChannelID WHERE (c.Status = 0) AND (c.ChannelDayMaxFee < 10000000) AND (b.ThisHourFee > c.ChannelDayMaxFee/24);
-- 2 下调该通道权重(把当前值大于 0的改为负值)
IF (@ChannelIDs <> '') THEN
SET @ChannelIDs = LEFT(@ChannelIDs, LENGTH(@ChannelIDs) - 1);
SET @mySql = CONCAT('UPDATE ChannelAreaWeight SET Weight = -Weight WHERE (ChannelID in (', @ChannelIDs, ') AND Weight > 0)');
PREPARE pstmt FROM @mySql ; -- 配置执行语句
EXECUTE pstmt;
DEALLOCATE PREPARE pstmt; -- 解除分配
END IF;
-- 设置此存储过程运行成功信息插入到 EventExecuteLog表
UPDATE EventExecuteLog SET executetime=NOW(),Description='OK' WHERE StartTime=prost AND ProcedureName='ChannelStopHourLimited_3Minute';
-- 提交事务
-- COMMIT;
END $$
DELIMITER ;
PS:* declare定义变量必须写在前面
* “--” 注释时,必需要带空格,也就是“ -- ”
* 游标定义能够放在前面,即便有些临时表尚未生成。