繁体   English   中英

MySQL触发器IF语法错误

[英]MySQL Trigger IF syntax error

我正在创建一些触发器(使用MySQL Workbench),但其中一个关于if语句出错。 这里是:

CREATE DEFINER = CURRENT_USER TRIGGER `mydatabase`.`transactions_AFTER_UPDATE` AFTER UPDATE ON `transactions` FOR EACH ROW
begin

if (old.idUser != new.idUser) then
    signal sqlstate '45000' set message_text = "Can't change transactions' initiator.";
end if;
declare oldAmountTokens integer;
SET @oldAmountTokens = (SELECT tokens from offers WHERE idoffer = old.idOffer);
declare newAmountTokens integer;
SET @newAmountTokens = (SELECT tokens from offers WHERE idoffer = new.idOffer);
declare diff integer;
SET @diff = @newAmountTokens - @oldAmountTokens;
UPDATE users SET tokens = users.tokens + @diff WHERE idUser = new.idUser;
end

MySQL Workbench告诉我

"missing 'end'" at line 6 (“ end if;”所在的位置) "missing 'end'" at line 6

和phpMyAdmin告诉我

"#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 5".

我真的很坚持,所以如果有人可以帮助我,我会非常高兴,我在网上搜索了IF语法,但是我没有发现任何错误...

好,问题解决了。

首先,我需要使用定界符来避免end if;附近的错误end if;

在接下来的错误,MySQL的要求declare报表中旁开始说,多亏了这个帖子我找到了答案。 谢谢 !

尽管我要删除transactions后的单引号,但是您的触发代码对我来说还不错。 您是否有delimiter语句?

delimiter //

CREATE DEFINER = CURRENT_USER TRIGGER `mydatabase`.`transactions_AFTER_UPDATE`
    AFTER UPDATE ON `transactions` FOR EACH ROW
begin
    if (old.idUser <> new.idUser) then
        signal sqlstate '45000' set message_text = "Can't change transactions  initiator.";
    end if;
    declare @oldAmountTokens integer;
    SET @oldAmountTokens = (SELECT tokens from offers WHERE idoffer = old.idOffer);
    declare @newAmountTokens integer;
    SET @newAmountTokens = (SELECT tokens from offers WHERE idoffer = new.idOffer);
    declare @diff integer;
    SET @diff = @newAmountTokens - @oldAmountTokens;
    UPDATE users SET tokens = users.tokens + @diff WHERE idUser = new.idUser;
end//

delimiter ;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM