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

Tạo stored procedure với delimiter trong MySQL


Cú pháp tạo stored procedure

DELIMITER // 
CREATE PROCEDURE ten_thu_tuc() 
BEGIN 
    -- Khai báo biến (nếu cần)
    DECLARE ten_bien KIEU_DU_LIEU; 
    -- Câu lệnh SQL
    Cau_lenh_SQL; 
END // 
DELIMITER ;

Ví dụ đầy đủ

1. Chọn database và đổi delimiter

mysql> USE test; 
Database changed 
mysql> DELIMITER //

2. Tạo procedure chọn tất cả từ StoredProcTable

mysql> CREATE PROCEDURE Sp_callTableStoredProcTable() 
-> BEGIN 
-> SELECT * FROM StoredProcTable; 
-> END // 
Query OK, 0 rows affected (0.54 sec)

3. Khôi phục delimiter và gọi procedure

mysql> DELIMITER ; 
mysql> CALL Sp_callTableStoredProcTable();
+-----------+------+ 
| FirstName | Age  | 
+-----------+------+ 
| John      | 23   | 
| Bob       | 24   | 
| David     | 20   | 
+-----------+------+ 
3 rows in set (0.03 sec) 
Query OK, 0 rows affected (0.06 sec)

4. Tạo procedure đếm bản ghi

mysql> DELIMITER // 
mysql> CREATE PROCEDURE CountingRecords() 
-> BEGIN 
-> SELECT COUNT(*) AS AllRecords FROM StoredProcTable; 
-> END // 
Query OK, 0 rows affected (0.19 sec) 
mysql> DELIMITER ;

5. Gọi procedure đếm

mysql> CALL CountingRecords();
+------------+ 
| AllRecords | 
+------------+ 
| 3          | 
+------------+ 
1 row in set (0.31 sec) 
Query OK, 0 rows affected (0.33 sec)

Các thành phần quan trọng

Thành phầnMô tảVí dụ
DELIMITER //Đổi dấu kết thúc câu lệnh từ ; sang //Tránh xung đột ; trong BEGIN...END
BEGIN ... ENDKhối lệnh thủ tụcBao bọc nhiều câu lệnh
DECLAREKhai báo biến cục bộDECLARE x INT DEFAULT 0;
CALLGọi thực thi procedureCALL ten_proc();
DROP PROCEDUREXóa procedureDROP PROCEDURE IF EXISTS ten_proc;

Procedure có tham số

DELIMITER // 
CREATE PROCEDURE GetUserById(IN user_id INT, OUT user_name VARCHAR(100)) 
BEGIN 
    SELECT name INTO user_name FROM users WHERE id = user_id; 
END // 
DELIMITER ;

Gọi procedure có tham số

mysql> CALL GetUserById(1, @name); 
mysql> SELECT @name;

Lưu ý tốt

  • Luôn dùng DROP PROCEDURE IF EXISTS trước khi tạo lại
  • Đặt tên procedure theo quy ước: sp_ prefix hoặc động từ
  • Comment rõ ràng logic nghiệp vụ bên trong
  • Tránh logic phức tạp trong procedure - chuyển sang application layer