Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Tạo Stored Procedure có tham số IN/OUT trong MySQL

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).