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
@vartồn tại trong session, không cầnDECLARE. 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 1hoặ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;