【问题标题】:SQLITE - IF Statement Inside Trigger ErrorSQLITE - 触发错误内的 IF 语句
【发布时间】:2021-12-18 02:15:51
【问题描述】:

我刚开始学习 MySQL 课程,在我的一项任务中,我需要在 Sqlite 中创建一个触发器,该触发器可以在名为 JordanFriend 的视图上执行更新命令。此更新还应传播到 Highschooler 表。此更新不允许评分超出 9-12 的范围。

我的触发器一直出错,不知道有什么问题。

这是我的触发器:

delimiter $$ 

CREATE TRIGGER `grade_update_check` 
BEFORE UPDATE ON `highschooler`
FOR EACH ROW BEGIN
IF (NEW.GRADE > 12) 
THEN SET NEW.GRADE = OLD.GRADE;
END IF;
IF (NEW.GRADE < 9) 
THEN SET NEW.GRADE = OLD.GRADE;
END IF; 
IF (SELECT COUNT(ID) FROM highschooler WHERE name = NEW.name and grade = NEW.grade) = 1 
THEN SET NEW.GRADE = OLD.GRADE; 
END IF; 
END $$

delimiter ;

这是我在尝试创建此触发器时不断遇到的错误:

sqlite> delimiter $$ 
   ...> 
   ...> CREATE TRIGGER `grade_update_check` 
   ...> BEFORE UPDATE ON `highschooler`
   ...> FOR EACH ROW BEGIN
   ...> IF (NEW.GRADE > 12) 
   ...> THEN SET NEW.GRADE = OLD.GRADE;
Error: near "delimiter": syntax error
sqlite> END IF;
Error: near "IF": syntax error
sqlite> IF (NEW.GRADE < 9) 
   ...> THEN SET NEW.GRADE = OLD.GRADE;
Error: near "IF": syntax error
sqlite> END IF; 
Error: near "IF": syntax error
sqlite> IF (SELECT COUNT(ID) FROM highschooler WHERE name = NEW.name and grade = NEW.grade) = 1 
   ...> THEN SET NEW.GRADE = OLD.GRADE; 
Error: near "IF": syntax error
sqlite> END IF; 
Error: near "IF": syntax error
sqlite> END $$
   ...> 
   ...> delimiter ;
Error: near "$$": syntax error

任何帮助或建议将不胜感激!

【问题讨论】:

    标签: mysql sqlite


    【解决方案1】:

    MySQL 和 SQLite 是不同的软件产品,它们有不同的语法和用法。

    在这种情况下,您不需要在 SQLite 中使用delimiter。这是 MySQL 客户端特有的东西,可以帮助解析器在触发器主体中的每个语句之后的 ; 与结束整个 CREATE TRIGGER 语句的 ; 之间混淆。

    SQLite 不需要delimiter,因为他们的客户端解析器可以区分。它知道; 是否在触发器体内。

    阅读https://www.sqlite.org/lang_createtrigger.html 了解在 SQLite 中创建触发器的示例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-23
      • 2022-11-07
      • 1970-01-01
      • 2014-03-15
      • 2020-09-12
      • 2015-06-02
      • 2017-04-28
      • 2012-07-06
      相关资源
      最近更新 更多