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

अल्पविराम से अलग स्ट्रिंग के माध्यम से लूप करने की प्रक्रिया काम नहीं कर रही है

हो सकता है कि यह पोस्ट थोड़ी पुरानी हो लेकिन मैंने देवर्ट द्वारा प्रस्तुत कोड को आजमाया है और यह मेरे लिए काम नहीं कर रहा है।

कुछ संशोधनों के साथ, यह संस्करण मेरे लिए काम करता है:

DELIMITER $$

CREATE PROCEDURE procedure1(IN strIDs VARCHAR(255))
BEGIN
  DECLARE strLen    INT DEFAULT 0;
  DECLARE SubStrLen INT DEFAULT 0;

  IF strIDs IS NULL THEN
    SET strIDs = '';
  END IF;

do_this:
  LOOP
    SET strLen = CHAR_LENGTH(strIDs);

    UPDATE TestTable SET status = 'C' WHERE Id = SUBSTRING_INDEX(strIDs, ',', 1);

    SET SubStrLen = CHAR_LENGTH(SUBSTRING_INDEX(strIDs, ',', 1)) + 2;
    SET strIDs = MID(strIDs, SubStrLen, strLen);

    IF strIDs = '' THEN
      LEAVE do_this;
    END IF;
  END LOOP do_this;

END
$$

DELIMITER ;

स्पष्टीकरण:

1) क्यों "+2" इन SET SubStrLen = CHAR_LENGTH(SUBSTRING_INDEX(strIDs, ',', 1)) + 2;

जब आप अगली पंक्ति में MID फ़ंक्शन निष्पादित करते हैं, तो स्ट्रिंग अनुक्रमणिका 1 से शुरू होती है। यदि आपके पास निम्न स्ट्रिंग '4500,2' है, तो Devart संस्करण के साथ, MID MID('4500,2',4,6) जैसा दिखता है, जो वापसी है ',2'।

इसलिए यदि आप सबस्ट्रिंग लंबाई में 1 जोड़ते हैं, तो आप सीमांकक पर हैं। यह काफी नहीं है।तो आप सीमांकक की लंबाई जोड़ते हैं। अब यह अच्छा है।

2) क्यों IF strIDs = '' THEN लूप कंडीशन में?

क्योंकि जब आप MID करते हैं तो आप एक स्ट्रिंग लौटाते हैं, भले ही यह स्ट्रिंग खाली हो।

Devart प्रक्रिया पैच कर रहे हैं! उत्तर देने वाले के लिए बहुत-बहुत धन्यवाद :)



  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 या PHP देशांतर और अक्षांश को दशमलव डिग्री में बदलने के लिए कार्य करता है

  2. मध्यरात्रि से अब तक अंतराल के साथ प्रति घंटा डेटा प्राप्त करें

  3. डेटाटाइम का उपयोग करते समय MySQL ग्रुप बाय डेट

  4. मैं एक स्थानीय .SQL फ़ाइल को MySQL में कैसे लोड करूं?

  5. कोडनिर्देशक चुनें- से-कहां