无法在MySQL触发器中声明变量

时间:2016-06-06 15:46:40

标签: mysql sql triggers

我在MySQL中创建以下触发器时遇到了困难:

CREATE TRIGGER TRG_COMPLETE_REMINDER
AFTER UPDATE ON reminders
FOR EACH ROW
BEGIN
    DECLARE
        new_date DATE;
    IF (NEW.complete = 1 AND recurrence <> 'NONE') THEN
        CASE recurrence
            WHEN '1 WEEK' THEN
                SELECT INTO new_date NEW.date + INTERVAL 7 DAY;
            WHEN '1 MONTH' THEN
                SELECT INTO new_date  NEW.date + INTERVAL 1 MONTH;
            WHEN '3 MONTH' THEN
                SELECT INTO new_date  NEW.date + INTERVAL 3 MONTH;
        END CASE;

        INSERT INTO reminders (description, date, userID, complete, recurrence)
        VALUES (NEW.description, new_date, NEW.userID, 0, NEW.recurrence);
    END IF;
END;

在我尝试声明new_date时,问题似乎正在发生。 MySQL返回以下错误消息:

  

#1064 - 您的SQL语法出错;检查与MySQL服务器版本对应的手册,以便在第8行的“INTO new_date NEW.date + INTERVAL 7 DAY”附近使用正确的语法

我希望此触发器在complete属性更改为1时创建新的提醒记录。新记录的日期应大于原始记录,具体取决于recurrence中存储的值

2 个答案:

答案 0 :(得分:1)

两次更正解决了这个问题:

  1. 更正SELECT声明中的条款顺序(即 在INTO new_date)之后移动SELECT new_date + INTERVAL 7 DAY
  2. 在创建触发器之前添加DELIMITER //

答案 1 :(得分:1)

您可以在INSERT语句中使用CASE expression权限,而不是使用变量:

self.navigationItem.leftBarButtonItem = UIBarButtonItem(title: "Item", style: .Plain, target: self, action: nil)

祝你好运。