sql >> Base de Datos >  >> RDS >> Mysql

Bucle de cursor MYSQL, ejecuta una ronda adicional, ¿por qué?

El controlador, que establece not_found_creadit = 1 , se activa cuando FETCH no devuelve filas, pero está comprobando su valor antes ejecutando FETCH , por lo que el cuerpo principal de su ciclo se ejecutará una vez más cuando FETCH falla, entonces el bucle sale al comienzo del siguiente iteración.

Reorganice su código para verificar el valor de su variable inmediatamente después el 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;


Además, considere corregir la ortografía de su variable a not_found_credit