टेबल की सभी पंक्तियों के माध्यम से लूप करने के लिए, MySQL में स्टोर्ड प्रोसीजर का उपयोग करें। सिंटैक्स इस प्रकार है:
DELIMITER // CREATE PROCEDURE yourProcedureName() BEGIN DECLARE anyVariableName1 INT DEFAULT 0; DECLARE anyVariableName2 INT DEFAULT 0; SELECT COUNT(*) FROM yourTableName1 INTO anyVariableName1; SET anyVariableName2 = 0; WHILE anyVariableName2 < anyVariableName1 DO INSERT INTO yourTableName2(yourColumnName,...N) SELECT (yourColumnName1,...N) FROM yourTableName1 LIMIT anyVariableName2,1; SET anyVariableName2 = anyVariableName2 + 1; END WHILE; END; //
उपरोक्त सिंटैक्स को समझने के लिए, दो टेबल बनाते हैं यानी एक में रिकॉर्ड हैं और दूसरी टेबल में स्टोर्ड प्रोसीजर का उपयोग करके लूप से रिकॉर्ड होंगे।
पहली टेबल बनाने का क्वेरी:
mysql> CREATE TABLE AllRows (
-> Id INT,
-> Name VARCHAR(100)
-> ); Query OK, 0 rows affected (0.46 sec)
INSERT कमांड का उपयोग करके पहली टेबल में कुछ रिकॉर्ड डालें:
mysql> INSERT INTO AllRows VALUES(1,'John'); Query OK, 1 row affected (0.12 sec) mysql> INSERT INTO AllRows VALUES(100,'Carol'); Query OK, 1 row affected (0.13 sec) mysql> INSERT INTO AllRows VALUES(300,'Sam'); Query OK, 1 row affected (0.15 sec) mysql> INSERT INTO AllRows VALUES(400,'Mike'); Query OK, 1 row affected (0.20 sec)
SELECT स्टेटमेंट का उपयोग करके टेबल से सभी रिकॉर्ड प्रदर्शित करें:
mysql> SELECT * FROM AllRows;
आउटपुट
+------+-------+ | Id | Name | +------+-------+ | 1 | John | | 100 | Carol | | 300 | Sam | | 400 | Mike | +------+-------+ 4 rows in set (0.00 sec)
दूसरी टेबल बनाने का क्वेरी:
mysql> CREATE TABLE SecondTableRows (
-> StudentId INT,
-> StudentName VARCHAR(100)
-> ); Query OK, 0 rows affected (0.54 sec)
अब आप स्टोर्ड प्रोसीजर का उपयोग करके टेबल की सभी पंक्तियों के माध्यम से लूप कर सकते हैं। स्टोर्ड प्रोसीजर इस प्रकार है:
mysql> DELIMITER // mysql> CREATE PROCEDURE Sp_AllRowsOfATable()
-> BEGIN
-> DECLARE lastRows INT DEFAULT 0;
-> DECLARE startRows INT DEFAULT 0;
-> SELECT COUNT(*) FROM AllRows INTO lastRows;
-> SET startRows = 0;
-> WHILE startRows < lastRows DO
-> INSERT INTO SecondTableRows(StudentId) SELECT (Id) FROM AllRows LIMIT startRows, 1;
-> SET startRows = startRows + 1;
-> END WHILE;
-> END;
-> // Query OK, 0 rows affected (0.22 sec)
mysql> DELIMITER ;
CALL कमांड का उपयोग करके स्टोर्ड प्रोसीजर को कॉल करें। सिंटैक्स इस प्रकार है:
CALL yourStoredProcedureName;
पहली टेबल की सभी पंक्तियों के माध्यम से लूप करने के लिए उपरोक्त स्टोर्ड प्रोसीजर को कॉल करें। क्वेरी इस प्रकार है:
mysql> CALL Sp_AllRowsOfATable(); Query OK, 1 row affected (0.61 sec)
स्टोर्ड प्रोसीजर को कॉल करने के बाद, आइए चेक करें कि दूसरी टेबल के साथ क्या हुआ। क्वेरी इस प्रकार है:
mysql> SELECT StudentId FROM SecondTableRows;
आउटपुट
+-----------+ | StudentId | +-----------+ | 1 | | 100 | | 300 | | 400 | +-----------+ 4 rows in set (0.00 sec)