Mysql
 sql >> Base de données >  >> RDS >> Mysql

Boucle de curseur MYSQL, exécute un tour supplémentaire, pourquoi ?

Le gestionnaire, qui définit not_found_creadit = 1 , est déclenché lorsque le FETCH ne renvoie aucune ligne, mais vous vérifiez sa valeur avant exécution de FETCH , ainsi le corps principal de votre boucle s'exécutera une fois de plus lorsque le FETCH échoue, alors la boucle boucle se termine au début du suivant itération.

Réorganisez votre code pour vérifier la valeur de votre variable immédiatement après le FETCH :

credit_loop : LOOP 
    FETCH cur_credit INTO vc_customer, dec_amount, vc_status, vc_user_type, vc_emp, vc_note;
    IF not_found_creadit THEN
        CLOSE cur_credit;
        LEAVE credit_loop;
    END IF;
    SELECT vc_customer, dec_amount, vc_status, vc_user_type, vc_emp, vc_note;
    ......
    ......
END LOOP;


Pensez également à corriger l'orthographe de votre variable en not_found_credit