ใช้ CREATE PROCEDURE รับพารามิเตอร์ แล้ว INSERT เข้าตาราง เรียกใช้ด้วย CALL
รูปแบบพื้นฐาน
CREATE PROCEDURE procedure_name (param1 TYPE, param2 TYPE, ...)
BEGIN
INSERT INTO table_name (col1, col2, ...) VALUES (param1, param2, ...);
END
ตัวอย่างสมบูรณ์
สร้างตาราง:
mysql> create table DemoTable1928 (
-> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> Name varchar(20),
-> Age int
-> );
สร้าง Stored Procedure (ใช้ DELIMITER):
mysql> delimiter //
mysql> create procedure insert_demo(IN Name varchar(40), IN Age int)
-> begin
-> insert into DemoTable1928(Name, Age) values(Name, Age);
-> end
-> //
Query OK, 0 rows affected (0.00 sec)
mysql> delimiter ;
เรียกใช้ Procedure:
mysql> call insert_demo('Chris', 24);
Query OK, 1 row affected, 1 warning (0.00 sec)
ตรวจสอบข้อมูล:
mysql> select * from DemoTable1928;
+----+-------+------+ | Id | Name | Age | +----+-------+------+ | 1 | Chris | 24 | +----+-------+------+ 1 row in set (0.00 sec)
คำอธิบายรายละเอียด
- DELIMITER //: เปลี่ยน delimiter ชั่วคราว เพื่อให้ ; ภายใน procedure ไม่จบคำสั่ง
- IN: พารามิเตอร์แบบ Input (มี OUT, INOUT อีก)
- BEGIN ... END: บล็อกคำสั่ง (ถ้ามีคำสั่งเดียว ไม่ต้องใช้ก็ได้)
- Warning: ตัวอย่างมี Warning เพราะ Name varchar(40) แต่ตาราง varchar(20) - ควรสอดคล้องกัน
ประโยชน์ของ Stored Procedure
- ลด Network traffic (ส่งแค่ CALL แทน SQL ยาว)
- รวม Business Logic ไว้ฝั่ง DB
- ควบคุมสิทธิ์ได้ละเอียด (GRANT EXECUTE)
- ป้องกัน SQL Injection (Parameterized)