3293_3435hiện tại(17) /16 / 15 / 14 / 13
Phiên bản phát triển:18 / Devel
Phiên bản không được hỗ trợ:12 / 11 / 10

8004_8051

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ả tỷ lệ kèo bóng đáPhần 44.8có thể dẫn đến một tình huống không mong muốn tỷ lệ kèo bóng đá đó một số hoạt động thành công trước khi một tỷ lệ kèo bóng đá 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 hàm thực hiện chuyển giữa hai tỷ lệ kèo bóng đá khoản:

Tạo chức năng Transfer_funds () trả về void dưới dạng $$
    Nếu [bắt 
        SPI_EXEC "Cập nhật tỷ lệ kèo bóng đá khoản Đặt số dư = Số dư - 100 WHERE ACCK_NAME = 'Joe'"
        SPI_EXEC "Cập nhật tỷ lệ kèo bóng đá 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;

Nếu thứ haiCập nhậtBá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 sự thất bại, nhưng kết quả của lần đầu tiênCập nhậtTuy 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 tỷ lệ kèo bóng đá khoản của Joe, nhưng sẽ không được chuyển vào tỷ lệ kèo bóng đá khoản của Mary. Điều này xảy ra bởi vì mỗiSPI_EXEClà một phép trừ riêng biệt và chỉ một tỷ lệ kèo bóng đá số các phép trừ đó được cuộn trở lại.

Để 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 tỷ lệ kèo bóng đá 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ộtSubtransactiontỷ lệ kèo bóng đá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 tỷ lệ kèo bóng đá khoản Đặt số dư = Số dư - 100 WHERE ACCK_NAME = 'Joe'"
            SPI_EXEC "Cập nhật tỷ lệ kèo bóng đá 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 sử dụngCatchvẫn được yêu cầu cho mục đích này. Nếu không thì tỷ lệ kèo bóng đá 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 độngBảng. TheSubtransactionLệ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 tỷ lệ kèo bóng đá 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 tỷ lệ kèo bóng đáSubtransactionLệnh cũng sẽ làm cho việc trừ được cuộn trở lại. Tuy nhiên, không tỷ lệ kèo bóng đá thoát ra khỏi mã TCL chứa (ví dụ, doreturn) Không gây ra rollback.

Gửi hiệu chỉnh

Nếu bạn thấy bất cứ điều gì tỷ lệ kèo bóng đá tài liệu không chính xác, không phù hợp Kinh nghiệm của bạn với tính năng cụ thể hoặc yêu cầu làm rõ thêm, Vui lòng sử dụngMẫu nàyĐể báo cáo vấn đề tỷ lệ kèo bóng đá liệu.