কম্পিউটার টিউটোরিয়াল

MySQL-এ স্টোয়ারড প্রোসিজার ব্যবহার করে টেবিলের সব রো লুপ করার পদ্ধতি

টেবিলের সব রো লুপ করতে 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; //
DELIMITER ;

সিনট্যাক্স বুঝতে দুটি টেবিল তৈরি করি। প্রথম টেবিলে রেকর্ড থাকবে এবং দ্বিতীয় টেবিলে স্টোয়ারড প্রোসিজার দিয়ে লুপ করে রেকর্ড কপি হবে।

প্রথম টেবিল তৈরির ক্যোয়ারি:

mysql> CREATE TABLE AllRows (
    -> Id INT,
    -> Name VARCHAR(100)
    -> ); Query OK, 0 rows affected (0.46 sec)

প্রথম টেবিলে কিছু রেকর্ড ইনসার্ট করি:

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)

সিলেক্ট স্টেটমেন্ট দিয়ে সব রেকর্ড দেখি:

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)
  1. MySQL-এ টেবিলের সকল ডেট আপডেট করা (DATE_ADD)

  2. MySQL-এ INSERT INTO SELECT দিয়ে এক টেবিল থেকে অন্য টেবিলে সকল রো কপি

  3. MySQL-এ শর্তসাপেক্ষে সারি আপডেট করার পদ্ধতি (CASE স্টেটমেন্ট ব্যবহার করে)

  4. MySQL টেবিল থেকে শুধু ৩টি অর্ডার করা সারি কীভাবে বের করবেন?