Mysql
 sql >> Database >  >> RDS >> Mysql

Ciclo del cursore MySQL, esegue un round in più, perché?

Il gestore, che imposta not_found_creadit = 1 , viene attivato quando FETCH non restituisce righe, ma ne stai verificando il valore prima eseguendo FETCH , quindi il corpo principale del tuo ciclo verrà eseguito una volta in più quando FETCH fallisce, quindi il ciclo del ciclo esce all'inizio del successivo iterazione.

Riorganizza il tuo codice per controllare il valore della tua variabile immediatamente dopo il 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;


Inoltre, considera di correggere l'ortografia della tua variabile in not_found_credit