Phiên kèo bóng đá hom nay được hỗ trợ:hiện tại(17) /16 / 15 / 14 / 13
Phiên kèo bóng đá hom nay phát triển:18 / Devel
Phiên kèo bóng đá hom nay không được hỗ trợ:12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1
kèo bóng đá hom nay liệu này dành cho phiên bản không được hỗ trợ của PostgreSQL.
Bạn có thể muốn xem cùng một trang chohiện tạiPhiên bản hoặc một trong kèo bóng đá hom nay phiên bản được hỗ trợ khác được liệt kê ở trên thay thế.

43.8. SubtransActions rõ kèo bóng đá hom nay

Khôi phục kèo bóng đá hom nay lỗi do truy cập cơ sở dữ liệu như được mô tả trongPhần 43.7.29367_9627

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

Hãy xem xét một chức năng thực hiện chuyển đổi giữa hai kèo bóng đá hom nay khoản:

9854_10351

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, kèo bóng đá hom nay khoản tiền sẽ được rút khỏi tài khoản của Joe, nhưng sẽ không được chuyển vào tài khoản của Mary.

Để tránh kèo bóng đá hom nay vấn đề như vậy, bạn có thể bọcplpy.executegọi trong một phép trừ rõ kèo bóng đá hom 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 bóng đá hom nay được tạo bằngplpy.subtransaction ()Hàm. kèo bóng đá hom 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 bóng đá hom nay, chúng tôi có thể viết lại chức năng của mình như:

11264_11802

Lưu ý rằng việc sử dụngthử/bắtvẫn được yêu cầu. Nếu không, 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 độngBảng sẽ không có bất kỳ hàng nào được chèn vào nó. Trình quản lý ngữ cảnh Subtransaction không bẫy các 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 trong phạm vi của nó sẽ được cam kết hoặc quay lại nguyên tử. Một sự cuộn lại của khối Subtransaction xảy ra trên bất kỳ loại thoát ngoại lệ nào, không chỉ các loại gây ra bởi các lỗi bắt nguồn từ truy cập cơ sở dữ liệu. Một ngoại lệ python thông thường được nêu ra bên trong một khối trừ rõ kèo bóng đá hom nay cũng sẽ khiến cho việc trừ được cuộn trở lại.

43.8.2. Phiên kèo bóng đá hom nay 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. Nếu sử dụng PL/Python với phiên bản Python cũ hơn, vẫn có thể sử dụng các phép trừ rõ kèo bóng đá hom nay, mặc dù không minh bạch. Bạn có thể gọi Trình quản lý trừ của Subtransaction__enter____exit__kèo bóng đá hom 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 tài khoản đặt số dư = số dư - 100 WHERE ACCCENT_NAME = 'Joe'"))
        plpy.execute ("Cập nhật tài 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, 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 kèo bóng đá hom nay 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;

Lưu ý:Mặc dù kèo bóng đá hom nay nhà quản lý ngữ cảnh đã được triển khai trong Python 2.5, để sử dụngvớiCú pháp trong phiên kèo bóng đá hom nay đó bạn cần sử dụngTuyên bố trong tương lai. Tuy nhiên, do chi tiết thực hiện, bạn không thể sử dụng kèo bóng đá hom nay câu lệnh trong tương lai trong kèo bóng đá hom nay chức năng PL/Python.