我目前有一個php腳本,它從一個表(活動)中刪除記錄並將其插入到另一個表(歸檔/歷史記錄)中。AFTER DELETE事件觸發器上的MySQL'CASE'語法
這樣,我正在寫一個事件觸發器,它會將相同的記錄再次插入到活動表(它是一個重複出現的任務),然後根據同一記錄中的另一個字段「優先級」更新記錄的「duedate」字段。
我已經完成了PHP腳本的所有邏輯,問題與我的事件觸發器中的語法有關。錯誤狀態「位於第14行SQL語句附近的語法錯誤」命令「」。 (結束語)。這個語法是否會更新表中的所有記錄或只是複製的記錄?
觸發語法在這裏:
BEGIN
INSERT INTO Tasks SELECT * FROM Tasks where taskName=taskName;
UPDATE Tasks
SET DueDate =
CASE
WHEN Priority = 'Daily' THEN DATE_ADD(DueDate, INTERVAL 1 DAY)
WHEN Priority = 'Weekly' THEN DATE_ADD(DueDate, INTERVAL 7 DAY)
WHEN Priority = 'Monthly' THEN DATE_ADD(DueDate, INTERVAL 1 MONTH)
WHEN Priority = 'Quarterly' THEN DATE_ADD(DueDate, INTERVAL 3 MONTH)
WHEN Priority = 'Bi-Yearly' THEN DATE_ADD(DueDate, INTERVAL 6 MONTH)
WHEN Priority = 'Annually' THEN DATE_ADD(DueDate, INTERVAL 1 YEAR)
ELSE DueDate
END;
澄清表名稱爲「任務」,PK爲「taskName」。 – LoMine
你能給我們完整的「CREATE」存儲過程嗎?我明白taskName是PK。另一個taskName在=的右邊呢?另外你的分隔符是什麼?我可能是錯的,但據我所知,分隔符應該在(BEGIN和END之間)和(BEGIN和END之外)之間有所不同。例如,'taskName = taskName;'和'END;'應該有不同的分隔符。 – Tin
我正在使用Adminr 3.3.3,當創建事件觸發器時,它會爲初始觸發器語法提供一些下拉輸入形式,其中參數爲Time,Event和Type,表示(BEFORE/AFTER),(INSER,UPDATE ,刪除)和(對於每行)。生成的原始語法如下所示: DELIMITER ;; CREATE TRIGGER'Tasks_ad' AFTER DELETE ON'Tasks' FOR EACH ROW BEGIN \t // SQL語句和邏輯 END ;; DELIMITER; – LoMine