2016-04-14 12 views
0

ich mit Triggern zu tun habe, und ich will die Erhöhung Anwendungsfehler hinzufügen, aber mein Code gibt:raise Anwendungsfehler auslösen

Fehlercode 1064, den SQL-Status 42000: Sie haben einen Fehler in der SQL-Syntax ; Überprüfen Sie das Handbuch, das Ihrer MySQL-Server-Version entspricht, um die richtige Syntax für die Verwendung in der Nähe von '(-20000,' Pay is between Texas minimum lohn! ') zu verwenden;

ENDE IF;

END‘in Zeile 9

und wenn ich das Teil raise Anwendungsfehler entfernen, es funktioniert perfekt.

Trigger:

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 ; 

Antwort

2

Ihre Syntax erscheint MySQL zu sein. Und doch ist raise_application_error ein Oracle-Konstrukt. Sie wollen signal, dokumentiert 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 msgtext = 'Pay is below Texas minimum wage!';  
    END IF; 
END @@ 
DELIMITER ;