MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLストアドプロシージャ内で結果セットを処理するにはどうすればよいですか?


カーソルを使用して、ストアドプロシージャ内の結果セットを処理できます。基本的に、カーソルを使用すると、クエリによって返された一連の行を繰り返し、それに応じて各行を処理できます。

CURSORの使用法を示すため MySQLストアドプロシージャ内で、「student_info」という名前のテーブルの値に基づいて、次のストアドプロシージャを作成しています-

mysql> Select * from student_info;
+-----+---------+----------+------------+
| id  | Name    | Address  | Subject    |
+-----+---------+----------+------------+
| 101 | YashPal | Amritsar | History    |
| 105 | Gaurav  | Jaipur   | Literature |
| 125 | Raman   | Shimla   | Computers  |
+-----+---------+----------+------------+
3 rows in set (0.00 sec)

次のクエリは、テーブルに保存されているすべてのアドレスのリストを返す「list_address」という名前のプロシージャを作成します-

mysql> Delimiter //
mysql> CREATE PROCEDURE list_address (INOUT address_list varchar(255))
    -> BEGIN
    -> DECLARE value_finished INTEGER DEFAULT 0;
    -> DECLARE value_address varchar(100) DEFAULT "";
    -> DEClARE address_cursor CURSOR FOR
    -> SELECT address FROM student_info;
    -> DECLARE CONTINUE HANDLER
    -> FOR NOT FOUND SET value_finished = 1;
    -> OPEN address_cursor;
    -> get_address: LOOP
    -> FETCH address_cursor INTO value_address;
    -> IF value_finished = 1 THEN
    -> LEAVE get_address;
    -> END IF;
    -> SET address_list = CONCAT(value_address,";",address_list);
    -> END LOOP get_address;
    -> CLOSE address_cursor;
    -> END //
Query OK, 0 rows affected (0.00 sec)

これで、このプロシージャを呼び出すと、以下の結果が表示されます-

mysql> DELIMITER ;

mysql> Set @address_list = "";
Query OK, 0 rows affected (0.00 sec)

mysql> CALL list_address(@address_list);
Query OK, 0 rows affected (0.00 sec)

mysql> Select @address_list;
+-------------------------+
| @address_list           |
+-------------------------+
| Shimla;Jaipur;Amritsar; |
+-------------------------+
1 row in set (0.00 sec)

  1. MySQLストアドプロシージャでFORLOOPを使用するにはどうすればよいですか?

    以下は、MySQLストアドプロシージャでFORLOOPを操作するための構文です- delimiter // CREATE procedure yourProcedureName() wholeblock:BEGIN DECLARE anyVariableName1 INT ; Declare anyVariableName3 int; DECLARE anyVariableName2 VARCHAR(255); SET anyVariableName1 =1 ; SET anyVariableName3 =10; SET anyVariableName2 =

  2. MySQLストアドプロシージャで条件を設定する

    ストアドプロシージャに条件を設定するには、MySQLでIF...ELSEを使用します。以下は、if-else-の構文です。 IF yourCondition then       yourStatement1,  ELSE           yourStatement2,  END IF; 上記の構文をストアドプロシージャに実装しましょう- mysql> DELIMITER // mysql> CREATE PROCEDURE IF_ELSE_DEMO(IN value int)