【问题标题】:raise application error Trigger in MySQL DBMS在 MySQL DBMS 中引发应用程序错误触发器
【发布时间】:2016-04-14 00:29:43
【问题描述】:

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

错误代码 1064,SQL 状态 42000:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以了解在 '(-20000,'Pay is below Texas最低工资!')附近使用的正确语法;

如果结束;

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 ;

【问题讨论】:

    标签: mysql triggers


    【解决方案1】:

    您的语法似乎是 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 ;
    

    【讨论】:

      猜你喜欢
      • 2015-04-26
      • 1970-01-01
      • 2021-08-04
      • 1970-01-01
      • 1970-01-01
      • 2010-09-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多