MySQL การใช้พารามิเตอร์ IN, OUT และ INOUT ใน Stored Procedure

ในบทความนี้เราจะมาเรียนรู้วิธีใช้งาน พารามิเตอร์ ใน Stored Procedure เพื่อให้สามารถ ส่งค่าเข้า และ ส่งค่ากลับออกมา ได้อย่างมีประสิทธิภาพ

พารามิเตอร์ใน Stored Procedure คืออะไร?

พารามิเตอร์คือค่าที่เราส่งเข้าไปให้ Stored Procedure เพื่อใช้ภายใน หรือบางครั้งอาจใช้เพื่อรับค่ากลับออกมาจาก Procedure

ใน MySQL เราสามารถกำหนดพารามิเตอร์ได้ 3 แบบ คือ

  • IN รับค่าจากภายนอกเข้าไปใน Procedure เท่านั้น
  • OUT ส่งค่ากลับออกมาจาก Procedure เท่านั้น
  • INOUT ใช้ได้ทั้งรับเข้าและส่งออก

พารามิเตอร์แบบ IN

เราจะสร้าง Procedure ที่รับชื่อพนักงาน แล้วแสดงคำทักทายออกมา

SQL
DELIMITER //

CREATE PROCEDURE greet_employee(IN emp_name VARCHAR(100))
BEGIN
    SELECT CONCAT('สวัสดีคุณ ', emp_name, '!') AS greeting;
END //

DELIMITER ;

เรียกใช้งาน

SQL
CALL greet_employee('อริสา');

ผลลัพธ์

greeting
สวัสดีคุณ อริสา!

พารามิเตอร์แบบ OUT

เราจะลองใช้ Procedure ที่คำนวณจำนวนวันของเดือน แล้วคืนค่าผ่าน OUT parameter

SQL
DELIMITER //

CREATE PROCEDURE get_days_in_month(IN month_num INT, OUT days INT)
BEGIN
    IF month_num IN (1,3,5,7,8,10,12) THEN
        SET days = 31;
    ELSEIF month_num = 2 THEN
        SET days = 28;
    ELSE
        SET days = 30;
    END IF;
END //

DELIMITER ;

เรียกใช้งาน

SQL
CALL get_days_in_month(4, @result);
SELECT @result AS days_in_month;

ผลลัพธ์

days_in_month
30

พารามิเตอร์แบบ INOUT

ในตัวอย่างนี้ เราจะส่งค่าตัวเลขไปใน Procedure และให้ Procedure เพิ่มค่าดังกล่าวขึ้น 10 แล้วส่งกลับมา

SQL
DELIMITER //

CREATE PROCEDURE add_bonus(INOUT salary DECIMAL(10,2))
BEGIN
    SET salary = salary + 10.00;
END //

DELIMITER ;

เรียกใช้งาน

SQL
SET @current_salary = 250.00;
CALL add_bonus(@current_salary);
SELECT @current_salary AS new_salary;

ผลลัพธ์

new_salary
260.00

หมายเหตุ

  • พารามิเตอร์ OUT และ INOUT ต้องใช้ร่วมกับตัวแปรแบบ session (@variable) เท่านั้น
  • IN parameter ไม่สามารถเปลี่ยนค่าได้ภายใน Procedure
  • การตั้งชื่อพารามิเตอร์ควรหลีกเลี่ยงการใช้ชื่อเดียวกับคอลัมน์หรือตัวแปรอื่น
แชร์เรื่องนี้