2016-03-02 28 views
0

我目前有一個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; 
+0

澄清表名稱爲「任務」,PK爲「taskName」。 – LoMine

+0

你能給我們完整的「CREATE」存儲過程嗎?我明白taskName是PK。另一個taskName在=的右邊呢?另外你的分隔符是什麼?我可能是錯的,但據我所知,分隔符應該在(BEGIN和END之間)和(BEGIN和END之外)之間有所不同。例如,'taskName = taskName;'和'END;'應該有不同的分隔符。 – Tin

+0

我正在使用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

回答

0

你缺少BEGIN一端。您需要2個END,一個用於CASE,另一個用於BEGIN。

DELIMITER ;; 
CREATE TRIGGER Tasks_ad AFTER DELETE ON Tasks FOR EACH ROW 
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; 
END;; 
DELIMITER ; 
+0

此語法會引發錯誤:**查詢中出現錯誤:';'附近出現語法錯誤; DELIMITER'在第15行**。即使我手動將分隔符號更改爲$$,它也會在第16行引發​​相同的錯誤**查詢中出現錯誤:第16行**處的'DELIMITER'附近出現語法錯誤。 – LoMine

+0

我的壞,錯字,我做了兩個BEGINs :(更新了答案。 – Tin

+1

工作!感謝您的幫助,對於事件觸發器來說很新穎,我還沒有100%的語法。 – LoMine