Khôi phục từ các lỗi gây ra bởi truy cập cơ sở dữ liệu như được mô tả kèo tỷ số bóng đá euro hôm nayPhần 42.8có thể dẫn đến một tình huống không mong muốn kèo tỷ số bóng đá euro hôm nay đó một số hoạt động thành công trước khi một kèo tỷ số bóng đá euro hôm nay số chúng thất bại và sau khi khôi phục lỗi đó, dữ liệu bị bỏ lại ở trạng thái không nhất quán. PL/TCL cung cấp một giải pháp cho vấn đề này dưới dạng các phép trừ rõ ràng.
Hãy xem xét một chức năng thực hiện việc chuyển giữa hai kèo tỷ số bóng đá euro hôm nay khoản:
9144_9647
Nếu thứ haiCập nhật
Báo cáo dẫn đến một ngoại lệ đang được nâng lên, chức năng này sẽ ghi lại kèo tỷ số bóng đá euro hôm nay, nhưng kết quả của lần đầu tiênCập nhật
tuy nhiên sẽ được cam kết. Nói cách khác, các khoản tiền sẽ được rút khỏi kèo tỷ số bóng đá euro hôm nay khoản của Joe, nhưng sẽ không được chuyển vào kèo tỷ số bóng đá euro hôm nay khoản của Mary. Điều này xảy ra bởi vì mỗiSPI_EXEC
Để xử lý các trường hợp như vậy, bạn có thể kết thúc nhiều hoạt động cơ sở dữ liệu kèo tỷ số bóng đá euro hôm nay một phép trừ rõ ràng, sẽ thành công hoặc quay trở lại toàn bộ. PL/TCL cung cấp mộtSubtransaction
lệnh để quản lý điều này. Chúng ta có thể viết lại chức năng của mình là:
Tạo chức năng Transfer_funds2 () trả về void dưới dạng $$ Nếu [bắt Subtransaction SPI_EXEC "Cập nhật kèo tỷ số bóng đá euro hôm nay khoản Đặt số dư = Số dư - 100 WHERE ACCK_NAME = 'Joe'" SPI_EXEC "Cập nhật kèo tỷ số bóng đá euro hôm nay khoản Đặt số dư = số dư + 100 WHERE ACCK_NAME = 'Mary'" errorMsg] Đặt kết quả [Định dạng "Chuyển tiền số tiền: %s" $ errorMsg] khác Đặt kết quả "Tiền chuyển được chuyển thành công" spi_exec "chèn vào các giá trị hoạt động (kết quả) ('[QUOTE $ result]')" $$ ngôn ngữ pltcl;
Lưu ý rằng việc sử dụngCatch
vẫn được yêu cầu cho mục đích này. Nếu không thì kèo tỷ số bóng đá euro hôm nay sẽ lan truyền đến cấp cao nhất của hàm, ngăn chặn việc chèn mong muốn vàoHoạt động
Bảng. TheSubtransaction
Lệnh không bẫy lỗi, nó chỉ đảm bảo rằng tất cả các hoạt động cơ sở dữ liệu được thực thi bên kèo tỷ số bóng đá euro hôm nay phạm vi của nó sẽ được cuộn lại với nhau khi báo cáo lỗi.
Một sự cuộn lại của quá trình trừ rõ ràng xảy ra trên bất kỳ lỗi nào được báo cáo bởi mã TCL có chứa, không chỉ các lỗi bắt nguồn từ truy cập cơ sở dữ liệu. Do đó, một ngoại lệ TCL thông thường được nêu ra bên kèo tỷ số bóng đá euro hôm naySubtransaction
Lệnh cũng sẽ làm cho việc trừ được cuộn trở lại. Tuy nhiên, không kèo tỷ số bóng đá euro hôm nay thoát ra khỏi mã TCL chứa (ví dụ, doreturn
) Không gây ra rollback.