สามารถสร้าง Stored Procedure ที่รัน SELECT * FROM table_name เพื่อแสดงข้อมูลตารางได้ แล้วเรียกด้วย CALL procedure_name()
ตัวอย่างการใช้งาน
1. สร้างตารางและเพิ่มข้อมูล
mysql> create table DemoTable1933 ( ClientName varchar(20) ); Query OK, 0 rows affected (0.00 sec)
mysql> insert into DemoTable1933 values('Chris Brown'); Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1933 values('David Miller'); Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1933 values('Adam Smith'); Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1933 values('John Doe'); Query OK, 1 row affected (0.00 sec)
ข้อมูลทั้งหมด:
mysql> select * from DemoTable1933;
+--------------+ | ClientName | +--------------+ | Chris Brown | | David Miller | | Adam Smith | | John Doe | +--------------+ 4 rows in set (0.00 sec)
2. สร้าง Stored Procedure แสดงข้อมูล
mysql> delimiter //
mysql> create procedure display_all_records()
-> begin
-> select * from DemoTable1933;
-> end
-> //
Query OK, 0 rows affected (0.00 sec)
mysql> delimiter ;
3. เรียก Stored Procedure
mysql> call display_all_records();
ผลลัพธ์:
+--------------+ | ClientName | +--------------+ | Chris Brown | | David Miller | | Adam Smith | | John Doe | +--------------+ 4 rows in set (0.00 sec) Query OK, 0 rows affected (0.00 sec)
ขยาย: Procedure รับ Parameter กรองข้อมูล
DELIMITER //
CREATE PROCEDURE get_clients_by_name(IN search_name VARCHAR(50))
BEGIN
SELECT * FROM DemoTable1933
WHERE ClientName LIKE CONCAT('%', search_name, '%');
END //
DELIMITER ;
-- เรียกใช้
CALL get_clients_by_name('Smith'); -- หาที่มี Smith
ข้อดีของ Stored Procedure สำหรับ SELECT
- Encapsulation: ซ่อน Logic Query ไว้ใน DB
- Security: ให้สิทธิ์ EXECUTE Procedure แทน SELECT ตารางตรง
- Performance: Query Plan Cache (ในบาง Version)
- Maintainability: เปลี่ยน Logic ที่ Procedure เดียว ไม่ต้องแก้ Application Code
⚠️ ข้อจำกัด
- MySQL Stored Procedure ไม่คืนค่า Result Set ให้ Application ได้ง่ายเหมือน Function (ต้องใช้ Prepared Statement หรือ Cursor)
- Debugging ยากกว่า Application Code
- Version Control ของ Procedure ยุ่งยากกว่า
สรุป: สร้าง Procedure ด้วย CREATE PROCEDURE name() BEGIN SELECT * FROM table; END เรียกด้วย CALL name() เหมาะสำหรับ Encapsulation และ Security แต่อาจเพิ่มความซับซ้อนใน Development