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 :
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.
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 ;
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.
Partager