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定義變量必須寫在前面
* 「--」 註釋時,必需要帶空格,也就是「 -- 」
* 遊標定義能夠放在前面,即便有些臨時表尚未生成。