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 :

Gestion d'exception dans une procédure stockée


Sujet :

SQL Procédural MySQL

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2007
    Messages : 19
    Points : 21
    Points
    21
    Par défaut Gestion d'exception dans une procédure stockée
    Bonjour,

    Toutes les nuits, je recharge dans MySQL 5.0.81 en mode batch, via des procédures stockées plusieurs tables. Si une procédure tombe en erreur, se sont tous mes rapports d'analyse qui sont dans les choux le matin.

    L'objectif serait de gérer une exception lors une requête tombe en erreur sans pour autant arrêter le batch et tracer dans une autre table l'erreur (éventuellement le code de l'erreur) pour que le matin je puisse rapidement trouver l'erreur

    Voici la procédure que j'ai imaginé (simplifié) mais qui ne fonctionne pas comme je voudrais :

    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
    DROP PROCEDURE IF EXISTS sp1;
     
    DELIMITER $$
    -- 
    CREATE PROCEDURE sp1()
    BEGIN
     DECLARE EXIT HANDLER FOR SQLEXCEPTION
      BEGIN
    	CREATE TABLE `ra_0002` ENGINE = MYISAM CHARACTER SET latin1 COLLATE latin1_general_ci As
    	SELECT un_champ FROM ma_table;
      END;
    	INSERT INTO job (Proc_sto,DateTime) VALUES ('sp1',CURRENT_TIMESTAMP());
    END$$
    -- 
    DELIMITER ;
    Lorsque je call cette procédure, la table ra_0002 est bien créée mais l'exception est aussi levée et un enregistrement est rajouté dans la table job. Si je remplace un_champ par un_champ_qui_n_existe_pas la table n'est pas créée et un enregistrement est rajouté dans la table job.

    Comment faut-il faire pour que seulement en cas d'erreur il rajoute un enregistrement dans la table job sans stopper l'exécution de la procédure ?
    Quelle est l'influence du paramètre SQLEXCEPTION ? je n'ai rien trouvé sur le net.

  2. #2
    Membre éprouvé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2006
    Messages
    730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 730
    Points : 923
    Points
    923

  3. #3
    Membre averti Avatar de Soutou
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    328
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 328
    Points : 380
    Points
    380
    Par défaut
    C'est normal, l'entrée dans le second BEGIN inhibe le handler SQLEXCEPTION, il faut donc le rerouter

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    BEGIN
        CREATE TABLE `ra_0002` ENGINE = MYISAM CHARACTER SET latin1 COLLATE latin1_general_ci AS
        SELECT un_champ FROM ma_table;
         RESIGNAL;
      END;
    mais cela n'est possible qu'à partir de la 5.5.

    Par ailleurs, ton INSERT sera fait dans tous les cas, c'est ce que tu veux?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [10g] Gestion d'exception dans une procédure
    Par donny dans le forum PL/SQL
    Réponses: 4
    Dernier message: 09/08/2013, 12h45
  2. Gestion des exceptions dans une procédure stockée
    Par merlubreizh dans le forum DB2
    Réponses: 13
    Dernier message: 02/10/2012, 19h05
  3. passage d'un nom de table dans une procédure stockée
    Par thierry V dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 26/07/2010, 17h48
  4. Réponses: 0
    Dernier message: 07/04/2010, 17h39
  5. Transformation de date dans une procédure stockée
    Par bd0606 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 27/10/2003, 12h31

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