ในบทความนี้เราจะมาเรียนรู้วิธีใช้งาน พารามิเตอร์ ใน 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) เท่านั้น INparameter ไม่สามารถเปลี่ยนค่าได้ภายใน Procedure- การตั้งชื่อพารามิเตอร์ควรหลีกเลี่ยงการใช้ชื่อเดียวกับคอลัมน์หรือตัวแปรอื่น