Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MYSQL-Cursor-Schleife, läuft eine zusätzliche Runde, warum?

Der Handler, der not_found_creadit = 1 setzt , wird ausgelöst, wenn FETCH gibt keine Zeilen zurück, aber Sie überprüfen seinen Wert vorher Ausführen von FETCH , so dass der Hauptteil Ihrer Schleife ein zusätzliches Mal ausgeführt wird, wenn FETCH fehlschlägt, dann wird die Schleife Schleife am Anfang der nächsten beendet Iteration.

Ordnen Sie Ihren Code neu an, um den Wert Ihrer Variablen unmittelbar nach zu überprüfen der 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;


Erwägen Sie auch, die Schreibweise Ihrer Variablen in not_found_credit zu korrigieren