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

Nhiều khối xử lý ngoại lệ

ROLLBACK TOSAVEPOINT không thể dùng trong hàm có bộ xử lý ngoại lệ, ta có cách mô phỏng hành vi tương tự bằng các khối lồng nhau. Các khối lồng nhau này dùng để nhóm và sắp xếp các câu lệnh theo thứ tự phụ thuộc lẫn nhau. Tại đây bạn sẽ chèn một khối bản ghi với bộ xử lý ngoại lệ mô phỏng SAVEPOINT, sau đó cập nhật một bản ghi với bộ xử lý ngoại lệ. Câu lệnh cập nhật đó sẽ báo lỗi, và bộ xử lý ngoại lệ sẽ tự động rollback chỉ riêng khối đó.

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

  • Trong khối đầu tiên, chèn các bản ghi sau vào patients (a1c=5.6, glucose=93, và fasting=TRUE), (6.3, 111, TRUE) (4.7, 65, TRUE) với một bộ xử lý EXCEPTION chèn 'failed to insert' làm msg vào bảng errors.
  • Mở một khối lồng nhau thứ hai và cập nhật bệnh nhân có ID bằng 1 để có giá trị fasting'true', kèm xử lý ngoại lệ ghi vào bảng errors với msg'Inserted string into boolean.'.
  • END 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.

-- Make a DO function
DO $$
-- Open a transaction block
BEGIN
    -- Open a nested block
    BEGIN
    	INSERT INTO ___ (___, ___, ___) 
        VALUES (5.6, 93, TRUE), ___, ___;
    -- Catch all exception types
    EXCEPTION WHEN others THEN
    	INSERT INTO ___ (msg) VALUES ('failed to insert');
    -- End nested block
    END;
    -- Begin the second nested block
	BEGIN
    	UPDATE patients SET ___ = '___' WHERE id=1;
    -- Catch all exception types
    EXCEPTION WHEN others THEN
        INSERT INTO errors (msg) VALUES ('Inserted ___ into ___.');
    -- End the second nested block
    END;
-- END the outer block
END;
$$ language 'plpgsql';
SELECT * FROM errors;
Chỉnh sửa và Chạy Mã