Bắt đầu ngayBắt đầu miễn phí

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

Xem khóa học

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_CONTEXT vào biến exc_context trong trình xử lý đầu tiên.
  • Lưu PG_EXCEPTION_DETAIL vào biến exc_detail trong 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;
Chỉnh sửa và Chạy Mã