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

MySQL: การประกาศตัวแปร (DECLARE) ใน Stored Procedure ให้ถูกต้อง

กฎการประกาศตัวแปรใน MySQL Stored Procedure

ใน MySQL DECLARE ตัวแปรต้องอยู่ ระหว่าง BEGIN ... END และต้องเป็น คำสั่งแรก ก่อนคำสั่งอื่นๆ (SET, SELECT, INSERT, ฯลฯ) ไม่สามารถประกาศกลางโค้ดได้

ตัวอย่างที่ถูกต้อง

mysql> DELIMITER //
mysql> CREATE PROCEDURE showVariablesValue()
    -> BEGIN
    ->     DECLARE output VARCHAR(100);  -- ต้องเป็นคำสั่งแรกใน BEGIN
    ->     SET output = 'Hello MySQL';
    ->     SELECT output;
    -> END //
Query OK, 0 rows affected (0.25 sec)
mysql> DELIMITER ;

เรียกใช้ Procedure:

mysql> CALL showVariablesValue();
+-------------+
| output      |
+-------------+
| Hello MySQL |
+-------------+
1 row in set (0.03 sec)

กฎสำคัญ

  1. ต้องอยู่ใน BEGIN ... END (Compound Statement)
  2. ต้องเป็นคำสั่งแรกๆ ก่อน SET, SELECT, IF, LOOP, ฯลฯ
  3. ประกาศหลายตัวแปรได้: DECLARE a INT DEFAULT 0; DECLARE b VARCHAR(50);
  4. รองรับ DEFAULT value ตอนประกาศ
  5. Scope = ภายใน BEGIN ... END Block นั้นๆ (Block-scoped)

ตัวอย่างผิด (Error)

CREATE PROCEDURE wrong()
BEGIN
    SET @x = 1;        -- ผิด: คำสั่งอื่นมาก่อน DECLARE
    DECLARE y INT;     -- Error: DECLARE not at start
    SELECT y;
END;

ตัวแปรชนิดต่างๆ

ประเภทSyntaxScopeคงอยู่นาน
Local VariableDECLARE var TYPE [DEFAULT val];BEGIN...END Blockแค่ใน Procedure
User VariableSET @var = value;Sessionจนกว่า Disconnect
System VariableSET GLOBAL/SESSION var = value;Global/Sessionตาม Scope
ParameterCREATE PROC(IN/OUT/INOUT param TYPE)Procedure Callแค่ใน Call

Best Practice

  • ประกาศตัวแปรครบหมดที่ต้น Block ก่อน Logic
  • ใช้ DEFAULT เพื่อป้องกัน NULL ไม่ตั้งใจ
  • ตั้งชื่อชัดเจน: v_count, v_name (Prefix v_)
  • หลีกเลี่ยงชื่อชนกับ Column Name (ใช้ Prefix)