Stored Procedure với tham số IN (input) và OUT (output)
Procedure nhận tham số đầu vào, xử lý, trả kết quả qua tham số OUT vào biến phiên.
Cú pháp tạo
DELIMITER //
CREATE PROCEDURE tenProc(
IN paramIn KIEU_DU_LIEU,
OUT paramOut KIEU_DU_LIEU
)
BEGIN
-- logic
SET paramOut = bieu_thuc;
END //
DELIMITER ;
Ví dụ: Kiểm tra giá trị có trong bảng
Bảng SumOfAll:
CREATE TABLE SumOfAll (Amount INT);
INSERT INTO SumOfAll VALUES (100), (330), (450), (400);
Tạo procedure sp_CheckValue:
DELIMITER //
CREATE PROCEDURE sp_CheckValue(IN value1 INT, OUT value2 INT)
BEGIN
SET value2 = (SELECT Amount FROM SumOfAll WHERE Amount = value1);
END //
DELIMITER ;
Gọi procedure
-- Trường hợp 1: Giá trị không có (300)
CALL sp_CheckValue(300, @isPresent);
SELECT @isPresent; -- NULL
-- Trường hợp 2: Giá trị có (330)
CALL sp_CheckValue(330, @isPresent);
SELECT @isPresent; -- 330
Kết quả
+------------+ +------------+
| @isPresent | | @isPresent |
+------------+ +------------+
| NULL | | 330 |
+------------+ +------------+
Các loại tham số
IN: Mặc định. Truyền giá trị vào, không thay đổi giá trị gốc của caller.OUT: Trả giá trị ra. Giá trị ban đầu trong procedure là NULL. Caller phải truyền biến phiên@var.INOUT: Cả hai. Giá trị vào được dùng, giá trị mới trả ra. Caller truyền@varđã có giá trị.
Lưu ý
- Phải dùng
DELIMITER // ... // DELIMITER ;khi body có nhiều câu lệnh. - Biến OUT chỉ gán được 1 giá trị (scalar). Muốn trả nhiều giá trị → dùng nhiều OUT param hoặc result set (SELECT trong proc).
- Procedure không trả về giá trị trực tiếp như Function (không dùng trong biểu thức SELECT).