โดยปกติแล้วเวลาเราเขียน Store Procedure เราจะเขียนกันประมาณนี้

ก็คือมาถึงปุ๊บก็ SELECT  INSERT  UPDATE  DELETE  ตามใจชอบเลยทันที แต่ปัญหาของการทำแบบนี้คือ เราจะไม่รู้เลยว่าผลลัพธ์นั้นสำเร็จลุล่วงไปได้ด้วยดี หรือเน่า
แต่ว่า ถ้าเราต้องการให้มันคืนผลการทำงานว่าสำเร็จมั้ย หรือว่าเน่าเละเทะ

ผมเลยลองหาอยู่ว่ามันพอจะมีวิธีทำได้มั้ยที่จะส่งคืนผลลัพธ์ออกมาให้มันรู้กันไปเลย
พอดีตาไวมองเห็นตรงที่ประกาศ พารามอเตอร์ พารามิเตอร์ (บรรทัดที่ 2  และ 3 ในโค๊ดข้างบน) มันมี IN อยู่ มันก็ต้องมี OUT สิ เลยลองส่องออกมา ก็เป็นสภาพตามนี้

ที่ผมเพิ่มลงไปคือบรรทัดที่ 4 กับ 13 ทำให้ผมสามารถส่งค่า TRUE กลับออกไปได้แล้ว แต่มันก็ยังมีประเด็นเล็กๆที่ยิ่งใหญ่อยู่ว่า แล้วเราจะรู้ได้อย่างไรว่ามันทำงานสำเร็จหรือไม่สำเร็จ สำหรับคนที่เขียนโปรแกรมเป็นคงนึกถึงสิ่งหนึ่งที่เรียกว่า Try-Catch แต่สำหรับคนที่เขียนโปรแกรมไม่เป็นก็น่าจะทนอ่านได้ถึงตรงนี้นะครับ

จากที่ลองค้นหาดูก็ไม่เจอ Try-Catch ใน MySQL แต่มันก็พอมีทางประยุกต์ใช้อยู่นิดนึงประมาณนี้

คำสั่งเริ่มเยอะ ให้โฟกัสบรรทัดที่ 8 – 11 นะครับ สรุปง่ายๆก็คือ สร้างตัวแปรมาเก็บสถานะของการ ROLLBACK และจะเป็น TRUE หากเกิดข้อผิดพลาด จากนั้นก็เริ่ม TRANSECTION

จากนั้นให้โฟกัสบรรทัดที่ 18 – 25 เป็นการนำสถานะ ของการ ROLLBACK มาตรวจสอบ ถ้า TRUE แสดงว่ามีข้อผิดพลาด เราก็จะสั่ง ROLLBACK จริงๆ ลงไป แต่ถ้าทุกอย่างเรียบร้อยเราก็จะ COMMIT (บันทึก) การทำงานทั้งหมดลงไป

ข้อสังเกต : ในช่วง IF หลังนี้ จะเห็นว่าเราสามารถใส่ CODE ลงไปได้ จึงประยุกต์ได้สารพัด จากในตัวอย่างเอาไว้ส่งสถานะกลับออกไปนอก Store Procedure บางคนอาจจะเอาไปใช้ในการบันทึก Log ลงตารางอื่น ก็เป็นได้

ข้อแนะนำ

  • ถ้าไม่เข้าใจคำต่อไปนี้ [TRANSECTION, ROLLBACK, COMMIT] ให้ไปเปิดเว็บไซต์หา “MySQL Transection” หรือไม่ก็หนังสือ MySQL, SQL Server ที่ไม่ใช่พื้นฐาน
  • ถ้าไม่เข้าใจ Try-Catch ลองไปหาหนังสือสอนเขียนโปรแกรมภาษาอะไรก็ได้ น่าจะมีอยู่แถวๆ การควบคุมข้อผิดพลาด อะไรประมาณนี้
  • ถ้าไม่เข้าใจ SELECT  INSERT  UPDATE  DELETE  ให้ลองไปหาหนังสือ ฐานข้อมูลพื้นฐาน ตัวไหนก็ได้ให้เหมือนกัน(เกือบ)ทั้งหมด
  • ถ้าไม่เข้าใจอะไรเลย ขอแนะนำไปหาหนังสือ เตรียมความพร้อมก่อนเรียนวิทยาการคอมพิวเตอร์ เล่มเล็กๆ ใน Se-Ed มี อ่านแถวๆเรื่องตรรกกะ และฐานข้อมูลให้มากๆ จากนั้นก็ค่อยๆฝึกเขียนโปรแกรมไปก่อน

 

About The Author

นายนภดล แข็งการนา

นักวิชาการคอมพิวเตอร์ - กลุ่มงานพัฒนาระบบสารสนเทศ
สำนักวิทยบริการและเทคโนโลยีสารสนเทศ
มหาวิทยาลัยราชภัฏนครสวรรค์

Leave Comment