การสร้างฟังก์ชันที่มีชื่อและการประกาศตัวแปร
หลังจากที่เห็นฟังก์ชันดีบักที่มีประสิทธิภาพในการทำงานจริงแล้ว ถึงเวลาลองสร้างขึ้นมาเองบ้าง เริ่มต้นด้วยการกำหนด function signature ซึ่งประกอบด้วยชื่อฟังก์ชัน พารามิเตอร์ และชนิดของค่าที่คืนกลับ จากนั้นก็เหมือนกับการเขียนฟังก์ชันแบบ DO ทั่วไป
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
Transactions and Error Handling in PostgreSQL
คำแนะนำการฝึกหัด
- กำหนดฟังก์ชันชื่อ
debug_statementที่รับคำสั่ง SQL เป็นพารามิเตอร์ชื่อsql_stmt - ชนิดของค่าที่ฟังก์ชันคืนกลับควรเป็น
BOOLEAN - ฟังก์ชันควรรันคำสั่ง SQL ที่ส่งเข้ามา และดักจับ exception ที่อาจเกิดขึ้น
- ฟังก์ชันควรคืนค่า
Trueหากมีการเรียกใช้การดีบัก และคืนค่าFalseหากไม่มี
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
-- Define our function signature
___ ___ ___ ___ debug_statement(
sql_stmt TEXT
)
-- Declare our return type
___ ___ AS $$
DECLARE
exc_state TEXT;
exc_msg TEXT;
exc_detail TEXT;
exc_context TEXT;
BEGIN
BEGIN
-- Execute the statement passed in
___ sql_stmt;
EXCEPTION WHEN others THEN
GET STACKED DIAGNOSTICS
exc_state = RETURNED_SQLSTATE,
exc_msg = MESSAGE_TEXT,
exc_detail = PG_EXCEPTION_DETAIL,
exc_context = PG_EXCEPTION_CONTEXT;
INSERT into errors (msg, state, detail, context) values (exc_msg, exc_state, exc_detail, exc_context);
-- Return True to indicate the statement was debugged
___ ___;
END;
-- Return False to indicate the statement was not debugged
RETURN ___;
END;
$$ LANGUAGE plpgsql;
SELECT debug_statement('INSERT INTO patients (a1c, glucose, fasting) values (20, 89, TRUE);')