sql >> Databasteknik >  >> RDS >> Mysql

MYSQL cursor loop, kör en extra runda, varför?

Hanteraren, som sätter not_found_creadit = 1 , aktiveras när FETCH returnerar inga rader, men du kontrollerar dess värde före exekverar FETCH , så huvuddelen av din loop kommer att köras en extra gång när FETCH misslyckas, avslutas loopslingan i början av nästa iteration.

Ordna om koden för att kontrollera värdet på din variabel direkt efter 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;


Överväg också att korrigera stavningen av din variabel till not_found_credit



  1. Ordning av kolumner i ett index med flera kolumner i MySQL

  2. Snabbare sätt att ta bort matchande rader?

  3. beställa sql-trädhierarki

  4. Hur undviker man dela med noll-fel i SQL?