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

Cách ẩn output của stored procedure MySQL

Mặc định stored procedure MySQL in ra kết quả của các SELECT bên trong. Để ẩn output, gán kết quả vào biến user-defined (@variable) thay vì SELECT trực tiếp.

Ví dụ minh họa

Tạo bảng:

CREATE TABLE person_information (
    Id INT, Name VARCHAR(20)
);

INSERT INTO person_information VALUES (100, 'John'), (101, 'Chris'), (102, 'Robert');

Tạo procedure gán kết quả vào biến @output:

DELIMITER //
CREATE PROCEDURE sp_supressOutputDemo()
BEGIN
    SET @output = (SELECT Name FROM person_information WHERE id = 101);
END //
DELIMITER ;

Gọi procedure (không in ra gì):

CALL sp_supressOutputDemo();

Lấy giá trị biến sau khi gọi:

SELECT @output;

Kết quả:

+---------+
| @output |
+---------+
| Chris   |
+---------+

Giải thích:

  • Biến user-defined @var tồn tại trong session, không cần DECLARE.
  • SET @output = (subquery) gán kết quả scalar (1 hàng 1 cột) vào biến.
  • Nếu subquery trả về nhiều hàng, sẽ báo lỗi. Dùng LIMIT 1 hoặc hàm tổng hợp.
  • Cách này dùng để procedure trả giá trị về cho ứng dụng client (Java, PHP, Python) qua OUT parameter hoặc session variable.

Thay thế chuẩn SQL: Dùng OUT parameter trong procedure:

CREATE PROCEDURE sp_getName(IN p_id INT, OUT p_name VARCHAR(20))
BEGIN
    SELECT Name INTO p_name FROM person_information WHERE Id = p_id;
END;