Bonjour,
Je viens à vous après avoir un peu farfouillé sur la toile.
Voici ma problématique:
Je voudrais pouvoir tester l'insertion dans une table pour savoir si je n'ai pas atteint la limite autorisé pour cet objet (limite paramétrable via une autre table).
Pour cela j'utilise donc un TRIGGER BEFORE INSERT, jusque là logique.
Maintenant comme l'insertion se fera via une application tierce propre au client, je voudrais pouvoir lui renvoyer une erreur personnalisé du genre:
"L'insertion à échoué car la limite de capacité a été atteinte pour ce niveau"
En fouillant un peu voilà ce que j'ai trouvé:
1 2
|
DECLARE CAPACITY_ERROR CONDITION FOR SQLSTATE '65000'; (65000: code non utilisé) |
Ensuite je déclare un handler
1 2 3 4 5 6
|
DECLARE EXIT HANDLER FOR CAPACITY_ERROR
BEGIN
SET @error = 'L'insertion à échoué car la limite de capacité a été atteinte pour ce niveau';
SIGNAL SQLSTATE VALUE '65000';
END; |
Ensuite pour déclencher mon exception:
Pour tester je fais en sorte que ma condition soit toujours vraie, voici donc un extrait de mon trigger:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| DELIMITER $$
CREATE TRIGGER `TR_INSERT_LEVEL_1A` BEFORE INSERT ON XIRL1A_LEVEL_1A FOR EACH ROW
BEGIN
DECLARE CURRENT_NB INTEGER;
DECLARE MAX_NB INTEGER;
DECLARE NAME VARCHAR(45);
DECLARE CAPACITY_ERROR CONDITION FOR SQLSTATE '65000';
DECLARE EXIT HANDLER FOR CAPACITY_ERROR
BEGIN
SET @error = 'L'insertion à échoué car la limite de capacité a été atteinte pour ce niveau';
SIGNAL SQLSTATE VALUE '65000';
END;
-- Déclenche mon exception
SIGNAL CAPACITY_ERROR;
END;
$$ |
Là l'insertion échoue ok, et le message d'erreur est le suivant:
ERROR 1644 (65000): Unhandled user-defined exception condition
C'est ce message que j'aimerai modifier.
Est-il donc possible de modifier ce message de retour?
sur le site MySQL (http://dev.mysql.com/doc/refman/5.5/en/signal.html) il parle de MESSAGE_TEST qui est standard et MYSQL_ERRNO mais si j'utilise MESSAGE_TEST j'ai un message d'erreur sur mon trigger (non déclaré).
Voilà, j'espère avoir été claire.
Je vous remercie d'avance pour votre aide.
Pour info je suis sur un serveur MySQL 5.5.20
Bien cordialement,
Soulangel
Partager