sql >> Database >  >> RDS >> Mysql

MYSQL-cursorlus, loopt een extra ronde, waarom?

De handler, die not_found_creadit = 1 . instelt , wordt geactiveerd wanneer de FETCH geeft geen rijen terug, maar u controleert de waarde voordat uitvoeren van FETCH , dus de hoofdtekst van je lus wordt een extra keer uitgevoerd wanneer de FETCH mislukt, dan eindigt de luslus aan het begin van de volgende iteratie.

Herschik uw code om de waarde van uw variabele direct na . te controleren de 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;


Overweeg ook om de spelling van uw variabele te corrigeren naar not_found_credit



  1. Database slaapt en veroorzaakt uitzondering

  2. DATEFROMPARTS() Voorbeelden in SQL Server (T-SQL)

  3. Database-indexering in PostgreSQL

  4. Docker PGMASTER PostgreSQL-versie-update