IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Procédural MySQL Discussion :

Déclencher une erreur personalisé dans un Trigger


Sujet :

SQL Procédural MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 2
    Par défaut Déclencher une erreur personalisé dans un Trigger
    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é:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DECLARE CAPACITY_ERROR CONDITION FOR SQLSTATE '65000'; (65000: code non utilisé)
    Ensuite je déclare un handler

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Candidat au Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 2
    Par défaut
    Bon j'ai trouvé la réponse à mon problème.

    Pour ceux que ça intéresse en fait pas besoin de déclarer un handler, il suffit de procéder ainsi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SIGNAL CAPACITY_ERROR SET MESSAGE_TEXT = '<message personnel>';
    Bien cordialement,

    Soulangel

Discussions similaires

  1. Déclencher une erreur dans main.
    Par jeremux dans le forum C
    Réponses: 2
    Dernier message: 07/10/2011, 14h59
  2. Déclencher une erreur "perso" dans un trigger
    Par sebpern dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 20/04/2010, 19h11
  3. Une erreur cachée, dans le POST
    Par bigltnt dans le forum Langage
    Réponses: 7
    Dernier message: 26/06/2007, 17h36
  4. Facile de déclencher une erreur mysql_fetch_array
    Par JackBeauregard dans le forum SQL Procédural
    Réponses: 14
    Dernier message: 12/07/2006, 21h13
  5. [DB2] Eviter une cascade infini dans un trigger
    Par Fatah93 dans le forum DB2
    Réponses: 2
    Dernier message: 25/04/2005, 14h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo