Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Pętla kursora MYSQL, uruchamia jedną dodatkową rundę, dlaczego?

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL COUNT() – Uzyskaj liczbę wierszy do zwrócenia przez zapytanie

  2. Proste zapytanie mysql, aby sprawdzić, czy wiersz istnieje

  3. Python i mysql na Mac OS X

  4. Doktryna 2 z wieloma indeksami

  5. Wyciek pamięci Java MySQL JDBC