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

MySQL Stored Procedure ด้วย IF THEN END IF แสดงผลเงื่อนไข

Stored Procedure Control Flow: IF-THEN-END IF

MySQL Stored Procedure รองรับ IF ... THEN ... END IF สำหรับ Conditional Logic ภายใน Procedure

Syntax

IF condition THEN
    statements;
END IF;

-- หรือ IF-ELSE
IF condition THEN
    statements;
ELSE
    statements;
END IF;

-- หรือ IF-ELSEIF-ELSE
IF condition1 THEN
    statements;
ELSEIF condition2 THEN
    statements;
ELSE
    statements;
END IF;

ตัวอย่าง: Procedure รับ Argument แล้ว Insert หรือ Select

CREATE TABLE DemoTable643 (ClientId INT);

INSERT INTO DemoTable643 VALUES (1000);

DELIMITER //
CREATE PROCEDURE IF_DEMO(IN argument INT)
BEGIN
    DECLARE firstArgument INT DEFAULT 0;
    DECLARE secondArgument INT DEFAULT 1;
    
    IF firstArgument = argument THEN
        INSERT INTO DemoTable643 VALUES (2000);
    END IF;
    
    IF secondArgument = argument THEN
        SELECT * FROM DemoTable643;
    END IF;
END //
DELIMITER ;

การทดสอบ

-- เรียกด้วย 0: Insert 2000 (ไม่ Select)
CALL IF_DEMO(0);

-- เรียกด้วย 1: Select ทั้งหมด (มี 1000 และ 2000)
CALL IF_DEMO(1);

ผลลัพธ์ CALL IF_DEMO(1):

+----------+
| ClientId |
+----------+
| 1000     |
| 2000     |
+----------+

ตัวอย่าง Advance: IF-ELSEIF-ELSE

CREATE PROCEDURE grade_student(IN score INT, OUT grade VARCHAR(2))
BEGIN
    IF score >= 90 THEN
        SET grade = 'A';
    ELSEIF score >= 80 THEN
        SET grade = 'B';
    ELSEIF score >= 70 THEN
        SET grade = 'C';
    ELSEIF score >= 60 THEN
        SET grade = 'D';
    ELSE
        SET grade = 'F';
    END IF;
END;

CASE Statement ใน Stored Procedure (Alternative)

CASE 
    WHEN score >= 90 THEN SET grade = 'A';
    WHEN score >= 80 THEN SET grade = 'B';
    WHEN score >= 70 THEN SET grade = 'C';
    WHEN score >= 60 THEN SET grade = 'D';
    ELSE SET grade = 'F';
END CASE;

⚠️ ข้อควรระวัง

  1. END IF ต้องมี Semicolon (;) - ไม่อยู่ใน END IF
  2. DECLARE ต้องอยู่ต้น BEGIN Block - ก่อน Statement อื่นๆ
  3. Nesting Level: MySQL จำกัด Nesting (ประมาณ 255 Levels)
  4. Performance: Logic ซับซ้อนใน SP ควรย้ายไป Application Layer

Debug Stored Procedure

-- ดู Warnings
SHOW WARNINGS;

-- Debug Print (MySQL ไม่มี PRINT ใช้ SELECT)
SELECT 'Debug: Entered IF block' AS msg;