要求是实现一个触发器,该触发器在过去1小时内多次检查异常表以查找满足一组条件的条目。基本上我们不希望收到有关瞬时异常的警报。
这是我所拥有的;
CREATE TRIGGER trException AFTER INSERT ON Exception
FOR EACH ROW
BEGIN
IF NEW.ExceptionMessage like '%The operation is timed out%' or
NEW.ExceptionMessage like '%https://....%' THEN
INSERT INTO NotificationLog ('Message','InsertedTime') SELECT 'Time out error',now()
WHERE (SELECT COUNT(ExceptionId) FROM Exception
WHERE CreateTimestamp > NOW() - INTERVAL 1 HOUR
AND ExceptionMessage LIKE '%The operation has timed out%'
AND ExceptionMessage LIKE '%https://....%') > 10;
ELSEIF NEW.ExceptionMessage like '%Error...%' THEN
...Next insert scenario with critria
END IF;
END;
我认为问题是嵌入式SELECT语句中的计数。当它在insert语句之外运行时,代码工作正常。我该怎么做才能解决这个问题?
答案 0 :(得分:0)
我已经解决了这个问题。通过添加一个表(ExceptionNotificationMessage)来保存通知消息,我能够将FROM子句添加到第一个SELECT语句并修复了问题。
CREATE TRIGGER trException AFTER INSERT ON Exception
FOR EACH ROW
BEGIN
IF NEW.ExceptionMessage like '%The operation is timed out%' or
NEW.ExceptionMessage like '%https://....%' THEN
INSERT INTO NotificationLog ('Message','InsertedTime')
SELECT 'Message','InsertedTime'
**FROM ExceptionNotificationMessage**
WHERE (SELECT COUNT(ExceptionId) FROM Exception
WHERE CreateTimestamp > NOW() - INTERVAL 1 HOUR
AND ExceptionMessage LIKE '%The operation has timed out%'
AND ExceptionMessage LIKE '%https://....%') > 10;
ELSEIF NEW.ExceptionMessage like '%Error...%' THEN
...Next insert scenario with criteria
END IF;
END;
马丁