Program obsługi, który ustawia not_found_creadit = 1
, jest uruchamiany, gdy FETCH
nie zwraca żadnych wierszy, ale sprawdzasz jego wartość przed wykonywanie FETCH
, więc główna część pętli zostanie wykonana jeszcze raz, gdy FETCH
kończy się niepowodzeniem, pętla kończy się na początku następnego iteracja.
Zmień układ kodu, aby sprawdzić wartość zmiennej bezpośrednio po 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;
Rozważ także poprawienie pisowni zmiennej na not_found_credit