Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Loop de cursor MYSQL, executa uma rodada extra, por quê?


O manipulador, que define not_found_creadit = 1 , é acionado quando o FETCH não retorna nenhuma linha, mas você está verificando seu valor antes executando FETCH , então o corpo principal do seu loop será executado mais uma vez quando o FETCH falha, então o loop de loop sai no início do próximo iteração.

Reorganize seu código para verificar o valor de sua variável imediatamente depois o 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;




Além disso, considere corrigir a ortografia de sua variável para not_found_credit