2015-04-23 81 views
3

我試圖找出什麼發生,如果一個事件失敗檢索錯誤,這是我的事件SQL:失敗事件

DELIMITER $$ 

CREATE EVENT IF NOT EXISTS `cdr2015_daily_update` 
ON SCHEDULE EVERY 1 DAY 
    STARTS (TIMESTAMP(CURRENT_DATE) + INTERVAL 1 DAY + INTERVAL 3 HOUR) 
DO 
BEGIN 
DECLARE EXIT HANDLER FOR MYSQLEXCEPTION, MYSQLWARNING 
    BEGIN 
    insert into events_state values ('cdr2015_daily_update', 'true', now(), 'unknown', 'unknown') 
    END; 

    insert into 
     cdr2015_v2 (clid, src, dst, dcontext, channel, dstchannel) 
    select 
     calldate, clid, src, dst, dcontext, channel, dstchannel 
     from cdr where DATE_FORMAT(calldate, '%Y-%m-%d') = subdate(current_date, 1); -- yesterday calls 

END; $$ 

DELIMITER ; 

每天03:00不前一天電話的備份。此事件將無法確定,但我想知道的錯誤,是這樣的:

`Error Code: 1136. Column count doesn't match value count at row 1` , is it possible to catch this error and insert it into another table? 

這是events_state表:

CREATE TABLE `events_state` (
`event` varchar(255) DEFAULT NULL, 
`failed` varchar(255) DEFAULT NULL, 
`fail_date` datetime, 
`reason1` varchar(255) DEFAULT NULL, 
`reason2` varchar(255) DEFAULT NULL, 
`RID` int(11) NOT NULL AUTO_INCREMENT, 
PRIMARY KEY (`RID`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 

現在事件被插入這樣的:

insert into events_state values ('cdr2015_daily_update', 'true', now(), 'unknown', 'unknown') 

它可以改變成這樣的東西?

insert into events_state values ('cdr2015_daily_update', 'true', now(), MYSQLEXCEPTION, MYSQLWARNING) 

我也無法管理運行此事件,因爲我在兩個END;收到錯誤,這裏是從MySQL-工作臺一些截圖:

Test Test2

更新:試圖更改第二個ENDEND; $$END;,工作臺不會顯示任何錯誤,但它不會運行查詢。

更新2:變更線insert ... 'unknown')insert ... 'unknown');,在線路的一端加入;。查詢現在運行,但即時得到另一個錯誤:Error Code: 1319. Undefined CONDITION: EXCEPTION

回答

0

這是正確的查詢:

SET GLOBAL event_scheduler = ON; 

DELIMITER $$ 

CREATE EVENT IF NOT EXISTS `cdr2015_daily_update` 
ON SCHEDULE EVERY 1 DAY 
    STARTS (TIMESTAMP(CURRENT_DATE) + INTERVAL 1 DAY + INTERVAL 3 HOUR) 
DO 
BEGIN 
    DECLARE CONTINUE HANDLER FOR SQLEXCEPTION 
    BEGIN 
    insert into events_state values ('cdr2015_daily_update', 'true', now(), 'unknown', 'unknown', 0); 
    END; 

    insert into 
     cdr2015 (calldate, clid, src, dst, dcontext, channel, dstchannel) 
    select 
     calldate, clid, src, dst, dcontext, channel, dstchannel 
     from cdr where DATE_FORMAT(calldate, '%Y-%m-%d') = subdate(current_date, 1) 
     limit 10; 

END; $$ 
DELIMITER ; 

我的MySQL版本爲5 .1所以錯誤處理將不可能。 「插入」 從異常錯誤文本僅是從5.6版本上可能,引用:

Getting SQLEXCEPTION message in procedures MySQL 5.5.x

MySQL Stored Procedure Error Handling

0

關於到底該錯誤,只是

> Your code 
> ; //this ; is used to close the insert i think 
> END $$ 
> DELIMITER ; 

不要把「;」),嘗試,它應該現在的工作

+0

試圖END $$和不工作沒有,試過END;沒有$$,查詢也不會運行 – Alpha2k

+0

當你只放END $$時,你得到的錯誤信息是什麼?你也將DELIMITER;以上是嗎?我馬上編輯我的答案 – Nighthunter22

+0

缺少分號 – Alpha2k