Computer >> Máy Tính >  >> Lập trình >> MySQL

Làm cách nào chúng ta có thể xử lý tập kết quả bên trong thủ tục được lưu trữ trong MySQL?


Chúng ta có thể sử dụng con trỏ để xử lý tập kết quả bên trong một thủ tục được lưu trữ. Về cơ bản, con trỏ cho phép chúng ta lặp lại một tập hợp các hàng được trả về bởi một truy vấn và xử lý từng hàng cho phù hợp.

Để chứng minh việc sử dụng CURSOR trong thủ tục được lưu trữ MySQL, chúng tôi đang tạo thủ tục được lưu trữ sau dựa trên các giá trị, như được hiển thị bên dưới, của bảng có tên ‘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)

Truy vấn sau sẽ tạo một thủ tục có tên là ‘list_address’ trả về danh sách tất cả các địa chỉ được lưu trữ trong bảng -

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)

Bây giờ, chúng ta có thể thấy kết quả bên dưới khi gọi thủ tục này -

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)