引发应用程序错误触发器

时间:2016-04-14 00:29:44

标签: mysql triggers

我正在处理触发器,我想添加引发应用程序错误,但我的代码表明:

  

错误代码1064,SQL状态42000:您的SQL语法中有错误;检查与您的MySQL服务器版本相对应的手册,以便使用接近正确的语法( - 20000,'支付低于德克萨斯州的最低工资标准!');

     

END IF;

     

END'在第9行

如果我删除了引发应用程序错误的部分,它就可以正常工作。

触发:

DELIMITER @@
DROP TRIGGER IF EXISTS gmtt.after_update_mcorr @@

CREATE TRIGGER gmtt.after_update_mcorr
AFTER UPDATE ON gmtt.mcorr
FOR EACH ROW
BEGIN
       IF OLD.etat = '0' AND NEW.etat = '1' THEN
            INSERT INTO historique(message, User, dateHisto) VALUES (CONCAT( 'a achevé la Maintenance ', OLD.codeMaint) , CURRENT_USER(), NOW()); 
       ELSE
raise_application_error(-20000,'Pay is below Texas minimum wage!');     

    END IF;

    END @@ 
DELIMITER ;

1 个答案:

答案 0 :(得分:7)

您的语法似乎是MySQL。然而,raise_application_error是Oracle构造。您想要signal,记录here

DELIMITER @@
DROP TRIGGER IF EXISTS gmtt.after_update_mcorr @@
CREATE TRIGGER gmtt.after_update_mcorr
AFTER UPDATE ON gmtt.mcorr
FOR EACH ROW
BEGIN
   IF OLD.etat = '0' AND NEW.etat = '1' THEN
        INSERT INTO historique(message, User, dateHisto)
             VALUES (CONCAT( 'a achevé la Maintenance ', OLD.codeMaint) , CURRENT_USER(), NOW()); 
   ELSE
       signal sqlstate '-20000' set message_text = 'Pay is below Texas minimum wage!';     
   END IF;
END @@ 
DELIMITER ;