Đăng nhập

Bài 32: Stored Procedure – Tạo hàm lưu trữ

Trong các ứng dụng thực tế, đôi khi bạn cần thực hiện một chuỗi các thao tác SQL lặp đi lặp lại. Nếu mỗi lần bạn phải viết lại toàn bộ câu lệnh, vừa tốn thời gian, vừa dễ sai sót. Đó là lúc Stored Procedure (Thủ tục lưu trữ) phát huy tác dụng.

Stored Procedure giúp bạn đóng gói logic xử lý SQL vào một khối, có thể gọi lại nhiều lần, thậm chí có thể truyền tham số vào. Nó giống như việc bạn viết một hàm (function) trong ngôn ngữ lập trình vậy, nhưng ở đây là hàm dành cho SQL Server, MySQL, hay PostgreSQL.


Stored Procedure là gì?

Stored Procedure là một tập hợp các câu lệnh SQL được lưu trữ trong cơ sở dữ liệu, có thể gọi thực thi nhiều lần với cú pháp ngắn gọn.

Stored Procedure có thể:

  • Nhận đầu vào (IN)
  • Trả kết quả ra (OUT)
  • Thực thi các thao tác như INSERT, UPDATE, DELETE, SELECT
  • Giúp giảm số lần giao tiếp giữa ứng dụng và database → tối ưu hiệu năng

Cú pháp tạo Stored Procedure (MySQL)

DELIMITER //

CREATE PROCEDURE ten_thu_tuc(IN ten NVARCHAR(100))
BEGIN
    SELECT * FROM users WHERE name = ten;
END //

DELIMITER ;

Giải thích:

  • DELIMITER //: Tạm đổi dấu kết thúc câu lệnh từ ; sang // để tránh nhầm với dấu ; bên trong procedure.
  • CREATE PROCEDURE: Tạo thủ tục mới.
  • IN ten: Tham số đầu vào tên ten.
  • BEGIN ... END: Khối chứa logic của thủ tục.

Gọi thủ tục đã tạo

CALL ten_thu_tuc('Linh');

Ví dụ 1: Tạo thủ tục thêm người dùng

DELIMITER //

CREATE PROCEDURE them_nguoi_dung(
    IN ten NVARCHAR(100),
    IN email NVARCHAR(100)
)
BEGIN
    INSERT INTO users (name, email) VALUES (ten, email);
END //

DELIMITER ;

Gọi:

CALL them_nguoi_dung('Nam', 'nam@example.com');

Ví dụ 2: Thủ tục có giá trị trả ra (OUT)

DELIMITER //

CREATE PROCEDURE dem_so_luong_users(OUT so_luong INT)
BEGIN
    SELECT COUNT(*) INTO so_luong FROM users;
END //

DELIMITER ;

Gọi:

CALL dem_so_luong_users(@ketqua);
SELECT @ketqua;

Khi nào nên dùng Stored Procedure?

Trường hợpNên dùng?
Logic phức tạp, nhiều bước xử lý
Tái sử dụng nhiều lần
Tăng bảo mật, che giấu truy vấn SQL
Truy vấn đơn giản, chỉ dùng 1 lần

Lưu ý:

  • Đôi khi cần phân quyền để sử dụng / tạo Stored Procedure.
  • Trong nhiều hệ quản trị như PostgreSQL, syntax sẽ có một vài khác biệt (ví dụ: LANGUAGE plpgsql…).
  • Quản lý stored procedure nên cẩn thận – khó bảo trì nếu viết quá dài.

Thực hành

  1. Tạo thủ tục xem_don_hang – truyền user_id và liệt kê tất cả đơn hàng của họ.
  2. Tạo thủ tục cap_nhat_gia_san_pham – truyền product_id, gia_moi.
  3. Tạo thủ tục bao_cao_doanh_thu – tính tổng doanh thu theo tháng.

Kết luận

Stored Procedure là một công cụ mạnh mẽ trong việc tối ưu hóa truy vấn và xử lý logic phía database. Dùng đúng lúc, đúng cách, bạn sẽ cải thiện hiệu suất hệ thống và bảo trì dễ dàng hơn.

👉 Trong bài sau, ta sẽ học đến Trigger – kích hoạt tự động khi dữ liệu thay đổi, giúp bạn kiểm soát database sâu hơn.


Thảo luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Đăng ký nhận tin mới

Nhận bài học, tài nguyên và cơ hội việc làm qua email hàng tuần.

Chúng tôi cam kết không spam. Bạn có thể hủy bất cứ lúc nào.