สัญลักษณ์ @ ใน MySQL: User-Defined Session Variables
สัญลักษณ์ @ ใน MySQL ใช้สำหรับประกาศ **ตัวแปรระดับเซสชัน (User-Defined Session Variables)** ซึ่งแตกต่างจากตัวแปรภายในโปรแกรม (Local Variables) ที่ประกาศด้วย DECLARE
ความแตกต่างระหว่าง @variable และ DECLARE variable
| ลักษณะ | @variable (Session Variable) | DECLARE variable (Local Variable) |
|---|---|---|
| ขอบเขต (Scope) | ทั้งเซสชัน (Session) | เฉพาะใน Stored Procedure/Function |
| การประกาศ | ไม่ต้อง DECLARE ใช้ได้เลย | ต้อง DECLARE ที่ส่วน BEGIN |
| อายุการใช้งาน | จบเมื่อเซสชันสิ้นสุด | จบเมื่อ Procedure ทำงานเสร็จ |
| การเข้าถึง | เข้าถึงได้จากภายนอก Procedure | เข้าถึงได้เฉพาะใน Procedure |
ตัวอย่างการใช้งาน @ ใน Stored Procedure
1. สร้างตารางและเพิ่มข้อมูล
CREATE TABLE DemoTable (
StudentName VARCHAR(50)
);
INSERT INTO DemoTable VALUES ('John Smith');
INSERT INTO DemoTable VALUES ('John Doe');
INSERT INTO DemoTable VALUES ('Chris Brown');
2. สร้าง Stored Procedure ที่ใช้ @variable
DELIMITER //
CREATE PROCEDURE `Demo_Of_@Symbol`()
BEGIN
SELECT COUNT(*) INTO @numberOfRecords FROM DemoTable;
END //
DELIMITER ;
3. เรียกใช้ Procedure และอ่านค่า @variable
CALL `Demo_Of_@Symbol`();
SELECT @numberOfRecords;
ผลลัพธ์:
+------------------+
| @numberOfRecords |
+------------------+
| 3 |
+------------------+
กรณีการใช้งานที่พบบ่อย
- ส่งค่าระหว่าง Stored Procedures ต่างๆ ในเซสชันเดียวกัน
- เก็บค่าชั่วคราวเพื่อใช้ในคำสั่ง SQL ต่อไป
- Debugging: ตรวจสอบค่าระหว่างการทำงานของ Procedure
ข้อควรระวัง
- ชื่อตัวแปร @ ต้องไม่ซ้ำกับคำสำคัญ (Reserved Keywords)
- ค่าเริ่มต้นคือ NULL หากไม่ได้กำหนดค่า
- ไม่ควรใช้แทน Local Variable ในกรณีที่ไม่จำเป็นต้องแบ่งปันค่า