MySQL में FOR LOOP नहीं, WHILE LOOP उपयोग करें
MySQL स्टोर्ड प्रोसीजर में **FOR LOOP नहीं होता** (Oracle PL/SQL के विपरीत)। इसके बजाय WHILE या LOOP ... LEAVE निर्माण का उपयोग करें।
WHILE LOOP पैटर्न (सिफारिश)
DELIMITER //
CREATE PROCEDURE YourProcedureName()
BEGIN
DECLARE counter INT DEFAULT 1;
DECLARE maxLimit INT DEFAULT 10;
DECLARE result VARCHAR(255) DEFAULT '';
WHILE counter <= maxLimit DO
SET result = CONCAT(result, counter, ',');
SET counter = counter + 1;
END WHILE;
SELECT result;
END //
DELIMITER ;
व्यावहारिक उदाहरण: 1 से 10 प्रिंट करें
1. प्रोसीजर बनाएं
mysql> DELIMITER //
mysql> CREATE PROCEDURE ForLoopDemo()
-> BEGIN
-> DECLARE start INT DEFAULT 1;
-> DECLARE maxLimit INT DEFAULT 10;
-> DECLARE result VARCHAR(255) DEFAULT '';
->
-> WHILE start <= maxLimit DO
-> SET result = CONCAT(result, start, ',');
-> SET start = start + 1;
-> END WHILE;
->
-> SELECT result;
-> END //
Query OK, 0 rows affected (0.37 sec)
mysql> DELIMITER ;
2. कॉल करें
mysql> CALL ForLoopDemo();
+-----------------------+
| result |
+-----------------------+
| 1,2,3,4,5,6,7,8,9,10, |
+-----------------------+
1 row in set (0.00 sec)
LOOP ... LEAVE पैटर्न (अधिक लचीला)
CREATE PROCEDURE LoopDemo()
BEGIN
DECLARE i INT DEFAULT 1;
DECLARE result VARCHAR(255) DEFAULT '';
loop_label: LOOP
IF i > 10 THEN
LEAVE loop_label;
END IF;
SET result = CONCAT(result, i, ',');
SET i = i + 1;
ITERATE loop_label; -- वैकल्पिक, अगले इटरेशन पर जाएं
END LOOP loop_label;
SELECT result;
END
लेबल (Labels) का उपयोग
loop_label: LOOP- लूप को नाम देंLEAVE loop_label- लूप से बाहर निकलें (break)ITERATE loop_label- अगले इटरेशन पर जाएं (continue)- नेस्टेड लूप्स में आवश्यक
कर्सर के साथ लूप (पंक्तियों पर पुनरावृत्ति)
CREATE PROCEDURE CursorLoop()
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE v_id INT;
DECLARE v_name VARCHAR(100);
DECLARE cur CURSOR FOR SELECT Id, Name FROM Users;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN cur;
read_loop: LOOP
FETCH cur INTO v_id, v_name;
IF done THEN LEAVE read_loop; END IF;
-- प्रत्येक पंक्ति पर कार्य
END LOOP;
CLOSE cur;
END
सारांश
| निर्माण | उपयोग | नोट |
|---|---|---|
WHILE condition DO ... END WHILE | ज्ञात इटरेशन, सरल लूप | सबसे आम |
LOOP ... LEAVE ... END LOOP | जटिल निकास शर्तें | लेबल आवश्यक |
REPEAT ... UNTIL condition END REPEAT | कम से कम एक बार चलाएं | पोस्ट-टेस्ट |
नोट: मूल लेख का "FORLOOP" सिंटैक्स अमान्य है। MySQL केवल ऊपर दिखाए गए लूप प्रकार समर्थन करता है।