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

MYSQL cursor loop, kører en ekstra runde, hvorfor?

Behandleren, som sætter not_found_creadit = 1 , udløses, når FETCH returnerer ingen rækker, men du tjekker dens værdi før udfører FETCH , så hoveddelen af ​​din loop vil køre en ekstra gang, når FETCH mislykkes, så afsluttes sløjfen ved starten af ​​næste iteration.

Omarranger din kode for at kontrollere værdien af ​​din variabel umiddelbart 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;


Overvej også at rette stavningen af ​​din variabel til not_found_credit



  1. Hvorfor er CTE bedre end cursor/afledt tabel/ underforespørgsler/temptabel osv.?

  2. Hvordan genererer man en trævisning fra dette resultatsæt baseret på trægennemløbsalgoritme?

  3. Sådan vælger du indtil en sum er nået

  4. Hvordan får jeg den aktuelle tidszone i MySQL?