คำสั่ง DECLARE ใช้สำหรับประกาศตัวแปรภายใน MySQL Stored Procedure (หรือ Function, Trigger) ต้องอยู่ที่ต้น Block (หลัง BEGIN) ก่อน Statement อื่นๆ
Syntax
DECLARE variable_name data_type [DEFAULT default_value];
ตัวอย่าง: คำนวณกำลังสอง
1. สร้าง Stored Procedure ใช้ DECLARE
mysql> delimiter //
mysql> create procedure square_demo(IN Value int)
-> begin
-> declare magicValue int;
-> set magicValue = Value;
-> select concat('Your Square Value=', magicValue * magicValue) as Output;
-> end;
-> //
Query OK, 0 rows affected (0.00 sec)
mysql> delimiter ;
2. เรียกใช้งาน
mysql> call square_demo(15);
ผลลัพธ์:
+-----------------------+ | Output | +-----------------------+ | Your Square Value=225 | +-----------------------+ 1 row in set (0.00 sec)
กฎการใช้ DECLARE
| กฎ | รายละเอียด |
|---|---|
| ตำแหน่ง | ต้องอยู่ทันทีหลัง BEGIN ก่อน Statement ใดๆ |
| ขอบเขต (Scope) | เฉพาะใน Block BEGIN...END ที่ประกาศ |
| ค่าเริ่มต้น | เป็น NULL ถ้าไม่ระบุ DEFAULT |
| ชนิดข้อมูล | รองรับทุกชนิด MySQL (INT, VARCHAR, DECIMAL, DATE, v.v.) |
| กำหนดค่า | ใช้ SET var = value; หรือ SELECT ... INTO var |
ตัวอย่างขั้นสูง: DECLARE หลายตัว + SELECT INTO
CREATE PROCEDURE get_user_stats(IN user_id INT)
BEGIN
DECLARE user_name VARCHAR(100);
DECLARE order_count INT DEFAULT 0;
DECLARE total_spent DECIMAL(10,2) DEFAULT 0.00;
SELECT name INTO user_name FROM users WHERE id = user_id;
SELECT COUNT(*), COALESCE(SUM(amount), 0)
INTO order_count, total_spent
FROM orders WHERE user_id = user_id;
SELECT user_name, order_count, total_spent;
END;
ตัวแปร User-Defined (@var) vs DECLARE
| ลักษณะ | DECLARE (Local Var) | @variable (Session Var) |
|---|---|---|
| Scope | Procedure Block เท่านั้น | ทั้ง Session/Connection |
| Syntax | DECLARE name TYPE | SET @name = value |
| ใช้ใน SQL ธรรมดาได้ไหม | ไม่ได้ | ได้ |
| Persistence | หายเมื่อ Procedure จบ | คงอยู่จน Disconnect |
สรุป: ใช้ DECLARE var_name data_type [DEFAULT val] ที่ต้น BEGIN Block ใน Stored Procedure สำหรับตัวแปรชั่วคราว ใช้ SET หรือ SELECT INTO กำหนดค่า