2010-02-05 6 views
2

J'ai une mise à jour simple qui utilisera une transaction. Si la transaction échoue, je veux revenir en arrière et envoyer une valeur entière de 0. Voici mon code jusqu'à présent. Cela ne fonctionne pas et tout ce que je récupère est entier 1 même quand il échoue.mysql exit handler help

declare exit handler for not found rollback; 
declare exit handler for sqlwarning rollback; 
declare exit handler for sqlexception rollback; 
set row = 0; 

START TRANSACTION; 
UPDATE user 
SET name = name 
WHERE code = code; 
COMMIT; 

set row = 1; 

Est-ce que quelqu'un a des idées comment je peux résoudre ce problème? Vraiment, je suis ouvert ici. Si quelqu'un a une meilleure approche, je suis tout ouïe.

Répondre

0

Je ne sais pas si vous venez de publier le mauvais code, mais votre requête ne génère aucune erreur, vous écrasez x avec x où y est égal à y, qui est NOP.

+0

Merci pour la réponse soulmerge. C'est le code que j'utilise. Chose amusante .. J'utilise ce même code pour un insert et ça marche parfaitement. J'ai regardé ce code et l'ai comparé au code de travail et il n'y a aucune différence. Je suis perplexe. – James1012

3

Vous pouvez joindre les commandes avec BEGIN et END:

DECLARE EXIT HANDLER FOR SQLEXCEPTION,NOT FOUND,SQLWARNING 
    BEGIN 
     ROLLBACK; 
     SELECT 0; 
    END; 
+0

Désolé, le formatage n'a pas été effectué. Le "BEGIN" est sur une ligne distincte, tout comme "rollback", "select 0;" et fin;". – Chosun