失败事件
问题描述:
我试图找出什么发生,如果一个事件失败检索错误,这是我的事件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-工作台一些截图:
更新:试图更改第二个END
从END; $$
到END;
,工作台不会显示任何错误,但它不会运行查询。
更新2:变更线insert ... 'unknown')
到insert ... 'unknown');
,在线路的一端加入;
。查询现在运行,但即时得到另一个错误:Error Code: 1319. Undefined CONDITION: EXCEPTION
答
这是正确的查询:
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版本上可能,引用:
答
关于到底该错误,只是
> Your code
> ; //this ; is used to close the insert i think
> END $$
> DELIMITER ;
(不要把“;”),尝试,它应该现在的工作
试图END $$和不工作没有,试过END;没有$$,查询也不会运行 – Alpha2k
当你只放END $$时,你得到的错误信息是什么?你也将DELIMITER;以上是吗?我马上编辑我的答案 – Nighthunter22
缺少分号 – Alpha2k