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