Vấn đề: Tạo Stored Procedure đơn giản trả về toàn bộ dữ liệu bảng
Cần đóng gói câu lệnh SELECT * FROM table vào một procedure để gọi lại dễ dàng.
Giải pháp: CREATE PROCEDURE với SELECT bên trong
1. Tạo bảng và dữ liệu
CREATE TABLE DemoTable (ClientName VARCHAR(20));
INSERT INTO DemoTable VALUES
('Chris Brown'), ('David Miller'), ('Adam Smith'), ('John Doe');
2. Tạo Stored Procedure
DELIMITER //
CREATE PROCEDURE display_all_records()
BEGIN
SELECT * FROM DemoTable;
END //
DELIMITER ;
3. Gọi Procedure
CALL display_all_records();
4. Kết quả
+--------------+
| ClientName |
+--------------+
| Chris Brown |
| David Miller |
| Adam Smith |
| John Doe |
+--------------+
Mở rộng: Procedure có tham số
CREATE PROCEDURE get_clients_by_name(IN p_name VARCHAR(20))
BEGIN
SELECT * FROM DemoTable WHERE ClientName LIKE CONCAT('%', p_name, '%');
END
Gọi: CALL get_clients_by_name('Chris');
Lợi ích của Stored Procedure
- Đóng gói logic nghiệp vụ ở tầng database.
- Giảm traffic mạng (gọi một câu lệnh thay vì gửi SQL dài).
- Kiểm soát quyền: user chỉ cần
EXECUTEtrên procedure, không cầnSELECTtrực tiếp trên bảng. - Tái sử dụng, dễ bảo trì.
Lưu ý
- Dùng
DELIMITERkhi tạo procedure chứa nhiều câu lệnh. - Tránh lạm dụng – logic phức tạp nên xử lý ở application layer.
- Debug procedure khó hơn SQL thông thường.