2014-05-07 29 views
-2
mysql -h $host -u $user -p$pass $database -e "Create trigger trgQueuedSms 
         AFTER DELETE ON tblSmsQueue 
FOR EACH ROW 
BEGIN 
DECLARE VALUE INTEGER; 
SET value := (SELECT SUBSTRING_INDEX(USER(),'@',1)='user') ; 
IF (value > 0) 
THEN 
INSERT INTO tblSmsQueueArchive(iID, sMsgId, sUserName, sResellerName,sDistributorName, sMsgText, sType, sSender, sDestination, bDlr, dtLoggedTime, iJobId, sFailReason) VALUES (old.iID, old.sMsgId, old.sUserName, old.sResellerName,old.sDistributorName,old.sMsgText, old.sType, old.sSender, old.sDestination, old.bDlr, NOW(), old.iJobId, 'DELETED'); 
END IF; 
END;" 

回答

0

既然你有你的觸發器定義分號,你應該申報DELIMITER比分號以外的內容,並使用該DELIMITEREND。例如,你可以使用$$作爲DELIMITER這樣的:

mysql -h $host -u $user -p$pass $database --delimiter="$$" -e "Create trigger trgQueuedSms 
         AFTER DELETE ON tblSmsQueue 
FOR EACH ROW 
BEGIN 
DECLARE VALUE INTEGER; 
SET value := (SELECT SUBSTRING_INDEX(USER(),'@',1)='user') ; 
IF (value > 0) 
THEN 
INSERT INTO tblSmsQueueArchive(iID, sMsgId, sUserName, sResellerName,sDistributorName, sMsgText, sType, sSender, sDestination, bDlr, dtLoggedTime, iJobId, sFailReason) 
VALUES (old.iID, old.sMsgId, old.sUserName, old.sResellerName,old.sDistributorName,old.sMsgText, old.sType, old.sSender, old.sDestination, old.bDlr, NOW(), old.iJobId, 'DELETED'); 
END IF; 
END $$" 
+0

感謝您的回答。我試過solution.Now我在1號線得到error.ERROR 1235(42000):該版本的MySQL不但支持'具有相同動作時間和事件的多個觸發器'表格 – user3612181

+0

這意味着該表格上已經有一個後刪除觸發器。如果您試圖替換現有的觸發器,則需要先刪除觸發器然後再創建它。 –

+0

我發現並解決了它。謝謝你的回覆 – user3612181