Phiên bản được hỗ trợ:hiện tại(17) /16 / 15 / 14 / 13
Phiên bản phát triển:18 / Devel
Phiên bản kèo tỷ số bóng đá euro hôm nay được hỗ trợ:12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1

46.8. SubtransActions rõ kèo tỷ số bóng đá euro hôm nay

Khôi phục từ các lỗi gây ra bởi truy cập cơ sở dữ kèo tỷ số bóng đá euro hôm nay như được mô tả trongPhần 46.7.2có thể dẫn đến một tình huống không mong muốn trong đó một số hoạt động thành công trước khi một trong 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/Python cung cấp một giải pháp cho vấn đề này dưới dạng các phép trừ rõ kèo tỷ số bóng đá euro hôm nay.

46.8.1. Trình quản lý bối cảnh phụ

Xem xét một chức năng thực hiện chuyển đổi giữa hai kèo tỷ số bóng đá euro hôm nay khoản:

Tạo chức năng Transfer_funds () trả về void dưới dạng $$
thử:
    plpy.execute ("Cập nhật kèo tỷ số bóng đá euro hôm nay khoản đặt số dư = số dư - 100 WHERE ACCCENT_NAME = 'Joe'"))
    plpy.execute ("Cập nhật kèo tỷ số bóng đá euro hôm nay khoản đặt số dư = số dư + 100 where account_name = 'Mary'"))
ngoại trừ plpy.spierror là e:
    result = "Lỗi chuyển tiền: % s" % e.args
khác:
    result = "tiền được chuyển chính xác"
plan = plpy.prepare ("chèn vào các giá trị hoạt động (kết quả) ($ 1)", ["văn bản"]))
plpy.execute (kế hoạch, [kết quả])
$$ ngôn ngữ plpythonu;

Nếu thứ haiCập nhậtBáo cáo dẫn đến một ngoại lệ được nêu ra, chức năng này sẽ báo cáo lỗ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 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.

Để tránh kèo tỷ số bóng đá euro hôm nay vấn đề như vậy, bạn có thể bọc của mình11264_11278gọi trong một phép trừ rõ kèo tỷ số bóng đá euro hôm nay. TheplpyMô -đun cung cấp một đối tượng trợ giúp để quản lý các phép trừ rõ kèo tỷ số bóng đá euro hôm nay được tạo bằngplpy.subtransaction ()Hàm. kèo tỷ số bóng đá euro hôm nay đối tượng được tạo bởi chức năng này thực hiệnGiao diện Trình quản lý bối cảnh. Sử dụng các phép trừ rõ kèo tỷ số bóng đá euro hôm nay, chúng tôi có thể viết lại chức năng của mình như:

11797_12339

Lưu ý rằng việc sử dụngthử/ngoại trừvẫn được yêu cầu. Nếu kèo tỷ số bóng đá euro hôm nay, ngoại lệ sẽ lan truyền lên đỉnh của ngăn xếp Python và sẽ khiến toàn bộ chức năng hủy bỏ vớiPostgreSQLLỗi, đểHoạt động12684_13177

46.8.2. Phiên bản Python cũ hơn

Cú pháp người quản lý ngữ cảnh bằng cách sử dụngvớiTừ khóa có sẵn theo mặc định trong Python 2.6. Để tương thích với kèo tỷ số bóng đá euro hôm nay phiên bản Python cũ hơn, bạn có thể gọi Trình quản lý phụ__enter____exit__kèo tỷ số bóng đá euro hôm nay chức năng bằng cách sử dụngEnterThoátBí danh tiện lợi. Hàm ví dụ chuyển tiền có thể được viết là:

Tạo chức năng Transfer_funds_old () trả về void dưới dạng $$
thử:
    subxact = plpy.subtransaction ()
    subxact.enter ()
    thử:
        plpy.execute ("Cập nhật kèo tỷ số bóng đá euro hôm nay khoản đặt số dư = số dư - 100 WHERE ACCCENT_NAME = 'Joe'"))
        plpy.execute ("Cập nhật kèo tỷ số bóng đá euro hôm nay khoản đặt số dư = số dư + 100 where account_name = 'Mary'"))
    ngoại trừ:
        nhập khẩu sys
        subxact.exit (*sys.exc_info ())
        nâng lên
    khác:
        subxact.exit (không có, không có, không có)
ngoại trừ plpy.spierror là e:
    result = "Lỗi chuyển tiền: % s" % e.args
khác:
    result = "tiền được chuyển chính xác"

plan = plpy.prepare ("chèn vào các giá trị hoạt động (kết quả) ($ 1)", ["văn bản"]))
plpy.execute (kế hoạch, [kết quả])
$$ ngôn ngữ plpythonu;

Gửi hiệu chỉnh

Nếu bạn thấy bất cứ điều gì trong kèo tỷ số bóng đá euro hôm nay không chính xác, không khớ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 đề kèo tỷ số bóng đá euro hôm nay.