Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

ใช้ DECLARE สร้างตัวแปรใน MySQL Stored Procedure

คำสั่ง 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)
ScopeProcedure Block เท่านั้นทั้ง Session/Connection
SyntaxDECLARE name TYPESET @name = value
ใช้ใน SQL ธรรมดาได้ไหมไม่ได้ได้
Persistenceหายเมื่อ Procedure จบคงอยู่จน Disconnect

สรุป: ใช้ DECLARE var_name data_type [DEFAULT val] ที่ต้น BEGIN Block ใน Stored Procedure สำหรับตัวแปรชั่วคราว ใช้ SET หรือ SELECT INTO กำหนดค่า