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

การใช้ WHERE แบบเงื่อนไขใน MySQL Stored Procedure เพื่อตั้งค่า DEFAULT ให้ค่า NULL

การอัปเดตค่า NULL ให้เป็นค่าที่กำหนดใน Stored Procedure

ใช้คำสั่ง UPDATE ร่วมกับ IS NULL ภายใน Stored Procedure เพื่อตั้งค่า Default ให้คอลัมน์ที่เป็น NULL

รูปแบบคำสั่ง

DELIMITER //
CREATE PROCEDURE procedure_name()
BEGIN
    UPDATE table_name 
    SET column_name = 'default_value' 
    WHERE column_name IS NULL;
END //
DELIMITER ;

ตัวอย่าง: ตั้งค่า FirstName = 'Robert' ให้แถวที่ FirstName เป็น NULL

1. สร้างตารางและเพิ่มข้อมูล (มี NULL)

CREATE TABLE DemoTable (
    Id INT,
    FirstName VARCHAR(50)
);

INSERT INTO DemoTable VALUES (100, 'Chris');
INSERT INTO DemoTable VALUES (101, NULL);
INSERT INTO DemoTable VALUES (102, 'Mike');
INSERT INTO DemoTable VALUES (103, NULL);

2. ดูข้อมูลก่อน

SELECT * FROM DemoTable;

ผลลัพธ์: Id 101 และ 103 มี FirstName = NULL

3. สร้าง Stored Procedure

DELIMITER //
CREATE PROCEDURE where_clauseProc()
BEGIN
    UPDATE DemoTable 
    SET FirstName = 'Robert' 
    WHERE FirstName IS NULL;
END //
DELIMITER ;

4. เรียกใช้ Procedure

CALL where_clauseProc();

ผลลัพธ์: Query OK, 2 rows affected (0.10 sec)

5. ตรวจสอบหลังรัน Procedure

SELECT * FROM DemoTable;

ผลลัพธ์:

+------+-----------+
| Id   | FirstName |
+------+-----------+
| 100  | Chris     |
| 101  | Robert    |
| 102  | Mike      |
| 103  | Robert    |
+------+-----------+

การใช้ IF() หรือ CASE ใน UPDATE (ทำได้ในคำสั่งเดียว ไม่ต้อง Procedure)

UPDATE DemoTable 
SET FirstName = IF(FirstName IS NULL, 'Robert', FirstName);

หรือ

UPDATE DemoTable 
SET FirstName = CASE WHEN FirstName IS NULL THEN 'Robert' ELSE FirstName END;

ข้อดีของ Stored Procedure ในกรณีนี้

  • Encapsulation: ซ่อน Logic ไว้ใน DB
  • Reusability: เรียกใช้ซ้ำได้ด้วย CALL
  • Security: ให้สิทธิ์ EXECUTE แทน UPDATE ตรงตาราง
  • Transaction: ควบคุม Transaction ได้ใน Procedure

ข้อควรระวัง

  • IS NULL คือวิธีเดียวที่ตรวจสอบ NULL ได้ถูกต้อง (= NULL ผิด)
  • Procedure นี้อัปเดตทุกแถวที่ NULL → อาจเยอะมาก ควรมี LIMIT หรือเงื่อนไขเพิ่ม
  • MySQL Procedure ไม่รองรับ Parameter แบบ OUT/INOUT ได้เต็มที่เหมือน PostgreSQL/Oracle

การเพิ่ม Parameter ให้ Procedure

DELIMITER //
CREATE PROCEDURE update_null_names(IN new_name VARCHAR(50))
BEGIN
    UPDATE DemoTable 
    SET FirstName = new_name 
    WHERE FirstName IS NULL;
END //
DELIMITER ;

CALL update_null_names('Default Name');