Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

MYSQL कर्सर लूप, एक अतिरिक्त राउंड चलाता है, क्यों?

हैंडलर, जो सेट करता है not_found_creadit = 1 , निकाल दिया जाता है जब FETCH कोई पंक्ति नहीं देता है, लेकिन आप पहले . के मान की जांच कर रहे हैं निष्पादित FETCH , इसलिए आपके लूप का मुख्य भाग एक अतिरिक्त समय निष्पादित करेगा जब FETCH विफल हो जाता है, फिर लूप लूप अगले . के प्रारंभ में बाहर निकल जाता है पुनरावृति।

बाद . के तुरंत बाद अपने वेरिएबल का मान जांचने के लिए अपने कोड को पुनर्व्यवस्थित करें 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;


साथ ही, अपने वैरिएबल की स्पेलिंग को 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 upsert और ऑटो-इन्क्रीमेंट अंतराल का कारण बनता है

  2. रिलेशनल डेटाबेस में IPv6-संगत पते को कैसे स्टोर करें

  3. चुनें कि पंक्ति संख्या =पंक्ति संख्या कहाँ है

  4. MySQL अद्यतन या JSON में एक कुंजी का नाम बदलें

  5. ताले की कुल संख्या लॉक टेबल के आकार से अधिक है