Tạo bảng demo
mysql> create table DemoTable (
-> Id int,
-> Score int
-> );
Query OK, 0 rows affected (0.69 sec)
Chèn dữ liệu
mysql> insert into DemoTable values(1, 858858686); Query OK, 1 row affected (0.11 sec) mysql> insert into DemoTable values(2, 9900554); Query OK, 1 row affected (0.22 sec) mysql> insert into DemoTable values(3, 646565667); Query OK, 1 row affected (0.15 sec)
Hiển thị dữ liệu
mysql> select * from DemoTable;
Kết quả
+------+-----------+ | Id | Score | +------+-----------+ | 1 | 858858686 | | 2 | 9900554 | | 3 | 646565667 | +------+-----------+ 3 rows in set (0.00 sec)
Tạo Stored Procedure có tham số OUT
mysql> DELIMITER //
mysql> CREATE PROCEDURE Test_StoredProcedure(IN id INT, OUT scoreValue INT)
-> BEGIN
-> SELECT Score INTO scoreValue FROM DemoTable tbl WHERE tbl.Id = id;
-> END
-> //
Query OK, 0 rows affected (0.18 sec)
mysql> DELIMITER ;
Gọi Stored Procedure và lưu kết quả vào biến @result
mysql> call Test_StoredProcedure(2, @result); Query OK, 1 row affected (0.00 sec)
Hiển thị giá trị biến
mysql> select @result;
Kết quả
+---------+ | @result | +---------+ | 9900554 | +---------+ 1 row in set (0.00 sec)
Giải thích:
DELIMITER //: Thay đổi delimiter để tránh xung đột với dấu ; bên trong procedure.IN id INT: Tham số đầu vào.OUT scoreValue INT: Tham số đầu ra (trả về giá trị).SELECT ... INTO bien: Gán kết quả truy vấn vào biến OUT.@result: Biến session để nhận giá trị OUT.
Lưu ý: Procedure chỉ trả về một giá trị đơn (scalar). Để trả về tập kết quả (result set), dùng SELECT trực tiếp trong procedure không cần INTO.