Ghi nhận context stack
Lấy stack context, tương tự như stack trace trong các ngôn ngữ khác, là một cách mạnh mẽ để gỡ lỗi các hàm phức tạp và lồng nhau.
Trong đoạn mã dưới đây, bạn cần ghi nhận stack context và lưu nó trong các exception handler của cả hai khối lồng nhau. Sau đó, bạn sẽ xem lại đầu ra này trong bảng errors để hỗ trợ gỡ lỗi nguyên nhân gây ra ngoại lệ trong hàm này.
Bài tập này là một phần của khóa học
Giao dịch và Xử lý Lỗi trong PostgreSQL
Hướng dẫn bài tập
- Khai báo một biến kiểu text,
exc_context, để giữ stack context. - Lưu
PG_EXCEPTION_CONTEXTvào biếnexc_contexttrong trình xử lý đầu tiên. - Lưu
PG_EXCEPTION_DETAILvào biếnexc_detailtrong trình xử lý thứ hai. - Ghi lại cả thông báo lỗi và stack context trong cả hai khối.
Bài tập tương tác thực hành trực tiếp
Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.
DO $$
DECLARE
exc_message text;
exc_details text;
-- Declare a variable, exc_context to hold the exception context
___ ___;
BEGIN
BEGIN
INSERT INTO patients (a1c, glucose, fasting) values (5.6, 93, TRUE),
(6.3, 111, TRUE),(4.7, 65, TRUE);
EXCEPTION
WHEN others THEN
-- Store the exception context in exc_context
GET STACKED DIAGNOSTICS exc_message = MESSAGE_TEXT,
___ = ___;
-- Record both the msg and the context
INSERT INTO errors (msg, context)
VALUES (___, ___);
END;
BEGIN
UPDATE patients set fasting = 'true' where id=1;
EXCEPTION
WHEN others THEN
-- Store the exception detail in exc_details
GET STACKED DIAGNOSTICS exc_message = MESSAGE_TEXT,
___ = ___;
INSERT INTO errors (___, ___)
VALUES (exc_message, exc_context);
END;
END$$;
SELECT * FROM errors;