2015-04-23 5 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

Обновление: Пробовал изменить второй END от END; $$ до END;, workbench не будет отображать никаких ошибок, но он также не выполнит запрос.

Обновление 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

Смежные вопросы