触发器创建不起作用

Posted

技术标签:

【中文标题】触发器创建不起作用【英文标题】:Trigger creation is not working 【发布时间】:2013-04-02 09:52:00 【问题描述】:

我在 phpmyadmin 上创建触发器时遇到问题。 我有一个像下面这样的简单代码,当我提交代码时,在变量 x 声明的行中返回了一个 sintax 错误。我知道 SELECT 查询有效,因为我已经对其进行了测试,并返回了一个字符串。谁能帮我?提前致谢。

DELIMITER $$

CREATE TRIGGER `after_assigntags_insert` AFTER INSERT ON `assigntags`
FOR EACH ROW 
BEGIN
DECLARE x VARCHAR(10);
SET x = (SELECT UltLabel FROM assignlabels WHERE ALmessage=1);
INSERT INTO messages (Message) VALUES (x);
$$
END

DELIMITER ;

【问题讨论】:

【参考方案1】:

这是一个语法错误,

END 应该出现在您的分隔符 $$ 之前。

试试这样的:

DELIMITER $$

CREATE TRIGGER `after_assigntags_insert` AFTER INSERT ON `assigntags`
FOR EACH ROW 
BEGIN
DECLARE x VARCHAR(10);
SET x = (SELECT UltLabel FROM assignlabels WHERE ALmessage=1);
INSERT INTO messages (Message) VALUES (x);
END
$$

DELIMITER ;

【讨论】:

【参考方案2】:

我认为BEGINDECLARE 之后

DELIMITER $$

CREATE TRIGGER `after_assigntags_insert` AFTER INSERT ON `assigntags`
FOR EACH ROW 

DECLARE 
  x VARCHAR(10);
BEGIN
  SET x = (SELECT UltLabel FROM assignlabels WHERE ALmessage=1);
  INSERT INTO messages (Message) VALUES (x);
  $$
END

DELIMITER ;

【讨论】:

【参考方案3】:

user variables怎么样?

DELIMITER $$

CREATE TRIGGER `after_assigntags_insert` AFTER INSERT ON `assigntags`
FOR EACH ROW 
BEGIN
   SET @x = (SELECT UltLabel FROM assignlabels WHERE ALmessage=1 LIMIT 1);
   INSERT INTO messages (Message) VALUES (@x);
$$
END

DELIMITER ;

【讨论】:

以上是关于触发器创建不起作用的主要内容,如果未能解决你的问题,请参考以下文章

sql触发器确保约会之间的30天不起作用

尝试触发 UILocalNotification 不起作用

检索新值时触发器在 PLSQL 中不起作用

PLSQL 触发器引发应用程序错误不起作用

如果触发器中的语句不起作用 SQL(Oracle)

Perforce 后用户编辑触发器不起作用,用作用户前编辑