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

Thực thi Dynamic SQL trong Stored Procedure MySQL

Giới thiệu

Để thực thi câu lệnh SQL được xây dựng động (dưới dạng chuỗi) bên trong Stored Procedure, MySQL cung cấp cơ chế PREPARE, EXECUTE, DEALLOCATE PREPARE.

Ví dụ minh họa

Bước 1: Tạo bảng và chèn dữ liệu

CREATE TABLE DemoTable2033 (
    Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    Name VARCHAR(20)
);
INSERT INTO DemoTable2033 (Name) VALUES ('Chris'), ('Bob'), ('David'), ('Mike');

Bước 2: Tạo procedure dùng Dynamic SQL

DELIMITER //
CREATE PROCEDURE dynamic_query()
BEGIN
    SET @query = CONCAT('SELECT * FROM DemoTable2033 WHERE Id = 3');
    PREPARE st FROM @query;
    EXECUTE st;
    DEALLOCATE PREPARE st;
END //
DELIMITER ;

Bước 3: Gọi procedure

CALL dynamic_query();

Kết quả:

+----+-------+
| Id | Name  |
+----+-------+
| 3  | David |
+----+-------+

Lưu ý: Luôn gọi DEALLOCATE PREPARE để giải phóng tài nguyên. Dynamic SQL trong procedure hữu ích khi tên bảng, cột, điều kiện WHERE được xác định tại runtime. Cần cảnh giác SQL Injection nếu chuỗi query chứa đầu vào người dùng chưa được kiểm tra.