การใช้ฟังก์ชันข้อผิดพลาดใน TRY...CATCH แบบซ้อนกัน
มีจักรยานไฟฟ้ารุ่นใหม่เข้ามาในร้าน จึงต้องอัปเดตสต็อกสินค้า
ต้องการบันทึกว่าได้รับจักรยาน Trek Powerfly 5 - 2018 จำนวน 2 คัน ราคาคันละ $3499.99 และจักรยาน New Power K- 2018 จำนวน 3 คัน ราคาคันละ $1999.99
ลองเพิ่มสินค้าเหล่านี้ลงในฐานข้อมูลเนื่องจากคิดว่าเป็นรุ่นใหม่ทั้งหมด แต่ลืมไปว่ามีรุ่นแรกอยู่ในสต็อกแล้ว โชคดีที่ตาราง products มี constraint กำหนดให้ชื่อสินค้าทุกรายการต้องไม่ซ้ำกัน
จึงเตรียม script สำหรับควบคุมข้อผิดพลาดที่อาจเกิดขึ้นระหว่างการแทรกข้อมูล พร้อมทั้งต้องการบันทึกข้อผิดพลาดลงในตารางชื่อ errors และหากการบันทึกข้อผิดพลาดนั้นล้มเหลว ให้แสดงหมายเลขข้อผิดพลาดและข้อความข้อผิดพลาดออกมา
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
Transactions and Error Handling in SQL Server
คำแนะนำการฝึกหัด
- ครอบส่วนจัดการข้อผิดพลาดด้วยบล็อก
CATCH - แทรก
'Error inserting a product'ลงในตารางerrorsและครอบการแทรกข้อมูลนี้ด้วยบล็อกTRYอีกชั้นหนึ่ง - ครอบส่วนจัดการข้อผิดพลาดแบบซ้อนกันด้วยบล็อก
CATCHอีกชั้นหนึ่ง - เลือกดึงบรรทัดข้อผิดพลาดและข้อความข้อผิดพลาดภายในบล็อก
CATCHชั้นใน
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
BEGIN TRY
INSERT INTO products (product_name, stock, price)
VALUES ('Trek Powerfly 5 - 2018', 2, 3499.99),
('New Power K- 2018', 3, 1999.99)
END TRY
-- Set up the outer CATCH block
___ ___
SELECT 'An error occurred inserting the product!';
-- Set up the inner TRY block
___ ___
-- Insert the error
INSERT INTO ___
VALUES ('Error inserting a product');
___ ___
-- Set up the inner CATCH block
___ ___
-- Show number and message error
SELECT
___ AS line,
___ AS message;
___ ___
___ ___