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 không được hỗ trợ:12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2 / 7.1
Tài 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 các phiên bản được hỗ trợ khác được liệt kê ở trên thay thế.

36.11. tỷ lệ kèo bóng đá tối nay từtỷ lệ kèo bóng đá tối naytỷ lệ kèo bóng đá tối nay

Phần này giải thích sự khác biệt giữaPostgreSQL'sPL/PGSQLNgôn ngữ và tỷ lệ kèo bóng đá tối naytỷ lệ kèo bóng đá tối nayNgôn ngữ, để giúp các nhà phát triển Port các ứng dụng từtỷ lệ kèo bóng đá tối nay® đếnPostgreSQL.

PL/PGSQLtương tự như PL/SQL trong nhiều khía cạnh. Nó là một ngôn ngữ bắt buộc có cấu trúc khối, và tất cả các biến phải được khai báo. Bài tập, vòng lặp, Điều kiện là tương tự. Sự khác biệt chính bạn nên giữ Tâm trí khi tỷ lệ kèo bóng đá tối nay từtỷ lệ kèo bóng đá tối nayđếnPL/PGSQLlà:

  • Không có giá trị mặc định cho các tham số trongPostgreSQL.

  • Bạn không thể sử dụng tên tham số giống như Các cột được tham chiếu trong hàm. tỷ lệ kèo bóng đá tối nay cho phép bạn làm điều này nếu bạn đủ điều kiện tên tham số bằng cách sử dụngfunction_name.paramater_name.

  • Bạn có thể quá tải tên tỷ lệ kèo bóng đá tối nay năng trongPostgreSQL12521_12596

  • Không cần con trỏ trongPL/PGSQL, Chỉ cần đặt truy vấn vàochoTuyên bố. (Nhìn thấyVí dụ 36-6.)

  • inPostgreSQLThe tỷ lệ kèo bóng đá tối nay năng cơ thể phải được viết như một chuỗi theo nghĩa đen. Vì thế Bạn cần sử dụng trích dẫn đô la hoặc thoát khỏi các trích dẫn đơn trong cơ thể tỷ lệ kèo bóng đá tối nay năng. Nhìn thấyPhần 36.2.1.

  • Thay vì các gói, hãy sử dụng các lược đồ để sắp xếp tỷ lệ kèo bóng đá tối nay năng thành các nhóm.

  • Vì không có gói Biến một trong hai. Điều này có phần khó chịu. Bạn có thể giữ thay vào đó, trạng thái mỗi phiên trong bảng tạm thời.

36.11.1. Bước vào ví dụ

Ví dụ 36-5Hiển thị cách tỷ lệ kèo bóng đá tối nay chức năng đơn giản từtỷ lệ kèo bóng đá tối nayđếnPL/PGSQL.

Ví dụ 36-5. tỷ lệ kèo bóng đá tối nay một chức năng đơn giản từtỷ lệ kèo bóng đá tối nayđếnPL/PGSQL

Đây làtỷ lệ kèo bóng đá tối nay tỷ lệ kèo bóng đá tối naytỷ lệ kèo bóng đá tối nay năng:

Tạo hoặc thay thế tỷ lệ kèo bóng đá tối nay năng CS_FMT_BROWSER_VESTER (V_Name Varchar,
                                                  v_version varchar)
Trả lại Varchar là
BẮT ĐẦU
    Nếu v_version là null thì
        Trả lại v_name;
    Kết thúc nếu;
    Trả lại v_name || '/' || v_version;
KẾT THÚC;
/
Hiển thị lỗi;

Hãy xem qua tỷ lệ kèo bóng đá tối nay năng này và xem sự khác biệt so vớiPL/PGSQL:

  • ThereturnTừ khóa trong Nguyên mẫu tỷ lệ kèo bóng đá tối nay năng (không phải cơ thể tỷ lệ kèo bóng đá tối nay năng) trở thànhreturninPOSTGRESQL. Cũng,trở thànhAS, và bạn cần thêm mộtNgôn ngữmệnh đề vìPL/PGSQLkhông phải là ngôn ngữ tỷ lệ kèo bóng đá tối nay năng duy nhất có thể.

  • inPostgreSQL, The Cơ thể tỷ lệ kèo bóng đá tối nay năng được coi là một chuỗi theo nghĩa đen, vì vậy Bạn cần sử dụng dấu ngoặc kép hoặc báo giá đô la xung quanh nó. Điều này thay thế cho việc chấm dứt/theo cách tiếp cận của tỷ lệ kèo bóng đá tối nay.

  • TheHiển thị lỗiLệnh không không tồn tại trongPostgreSQL,, và không cần thiết vì lỗi được báo cáo tự động.

Đây là cách chức năng này trông như thế nào khi được tỷ lệ kèo bóng đá tối nay sangPostgreSQL:

Tạo hoặc thay thế tỷ lệ kèo bóng đá tối nay năng CS_FMT_BROWSER_VESTER (V_Name Varchar,
                                                  v_version varchar)
Trả lại varchar là $$
BẮT ĐẦU
    Nếu v_version là null thì
        Trả lại v_name;
    Kết thúc nếu;
    Trả lại v_name || '/' || v_version;
KẾT THÚC;
$$ ngôn ngữ plpgsql;

Ví dụ 36-6Hiển thị cách tỷ lệ kèo bóng đá tối nay một hàm tạo ra một hàm khác chức năng và cách xử lý các vấn đề trích dẫn tiếp theo.

Ví dụ 36-6. tỷ lệ kèo bóng đá tối nay một chức năng tạo ra Một chức năng khác từtỷ lệ kèo bóng đá tối nayđếnPL/PGSQL

Quy trình sau lấy hàng từ AChọnTuyên bố và xây dựng một tỷ lệ kèo bóng đá tối nay năng lớn với kết quả trongnếu16964_17077choVòng lặp.

Đây là phiên bản tỷ lệ kèo bóng đá tối nay:

17197_17945

Đây là cách tỷ lệ kèo bóng đá tối nay năng này kết thúc trongPostgreSQL:

18092_19219

Lưu ý cách cơ thể của tỷ lệ kèo bóng đá tối nay năng được xây dựng riêng và đi quaquote_literalđến Nhân đôi bất kỳ dấu ngoặc kép trong đó. Kỹ thuật này là cần thiết bởi vì chúng tôi không thể sử dụng trích dẫn đô la một cách an toàn để xác định tỷ lệ kèo bóng đá tối nay năng mới: Chúng tôi không biết chắc chắn các chuỗi sẽ là gì được nội suy từgiới thiệu_key.key_stringTrường. (Chúng tôi là giả sử ở đâygiới thiệu_key.kindCó thể luôn luôn tin tưởng vào làmáy chủ, miềnhoặcurl, nhưnggiới thiệu_key.key_stringCó thể bất cứ điều gì, đặc biệt là nó có thể chứa các dấu hiệu đô la.) Điều này chức năng thực sự là một cải tiến trên tỷ lệ kèo bóng đá tối nay gốc, bởi vì nó sẽ không tạo mã bị hỏng khigiới thiệu_key.key_stringhoặcgiới thiệu_key.referrer_typechứa báo giá Marks.

Ví dụ 36-7Hiển thị cách tỷ lệ kèo bóng đá tối nay chức năng vớioutThông số và thao tác chuỗi.PostgreSQLkhông có tích hợpusterHàm, nhưng bạn có thể tạo một bằng cách sử dụng kết hợp các tỷ lệ kèo bóng đá tối nay năng khác.inPhần 36.11.3Có mộtPL/PGSQLTriển khaiustermà bạn có thể sử dụng để thực hiện tỷ lệ kèo bóng đá tối nay đổi của mình dễ dàng hơn.

Ví dụ 36-7. tỷ lệ kèo bóng đá tối nay một thủ tục với chuỗi Thao tác vàouttham số từtỷ lệ kèo bóng đá tối nayđếnPL/PGSQL

sau đâytỷ lệ kèo bóng đá tối nayQuy trình tỷ lệ kèo bóng đá tối nay được sử dụng để phân tích URL và trả về một số các yếu tố (máy chủ, đường dẫn và truy vấn).

Đây là phiên bản tỷ lệ kèo bóng đá tối nay:

Tạo hoặc thay thế quy trình CS_PARSE_URL (
    v_url trong varchar,
    v_host out varchar, - điều này sẽ được truyền lại
    v_path out varchar, - cái này cũng vậy
    v_query out varchar) - và cái này
LÀ
    Số nguyên A_POS1;
    Số nguyên A_POS2;
BẮT ĐẦU
    v_host: = null;
    v_path: = null;
    V_Query: = null;
    a_pos1: = uster (v_url, '//');

    Nếu a_pos1 = 0 thì
        TRỞ LẠI;
    Kết thúc nếu;
    a_pos2: = uster (v_url, '/', a_pos1 + 2);
    Nếu a_pos2 = 0 thì
        V_host: = Subrtr (V_URL, A_POS1 + 2);
        v_path: = '/';
        TRỞ LẠI;
    Kết thúc nếu;

    V_host: = Subrtr (V_URL, A_POS1 + 2, A_POS2 - A_POS1 - 2);
    a_pos1: = uster (v_url, '?', a_pos2 + 1);

    Nếu a_pos1 = 0 thì
        v_path: = Subrtr (V_URL, A_POS2);
        TRỞ LẠI;
    Kết thúc nếu;

    V_Path: = Subrtr (V_URL, A_POS2, A_POS1 - A_POS2);
    V_Query: = Subrtr (V_URL, A_POS1 + 1);
KẾT THÚC;
/
Hiển thị lỗi;

Đây là bản dịch có thể thànhPL/PGSQL:

Tạo hoặc thay thế tỷ lệ kèo bóng đá tối nay năng CS_PARSE_URL (
    v_url trong varchar,
    v_host out varchar, - điều này sẽ được truyền lại
    v_path out varchar, - cái này cũng vậy
    v_query out varchar) - và cái này
Như $$
TUYÊN BỐ
    Số nguyên A_POS1;
    Số nguyên A_POS2;
BẮT ĐẦU
    v_host: = null;
    v_path: = null;
    V_Query: = null;
    a_pos1: = uster (v_url, '//');

    Nếu a_pos1 = 0 thì
        TRỞ LẠI;
    Kết thúc nếu;
    a_pos2: = uster (v_url, '/', a_pos1 + 2);
    Nếu a_pos2 = 0 thì
        V_host: = Subrtr (V_URL, A_POS1 + 2);
        v_path: = '/';
        TRỞ LẠI;
    Kết thúc nếu;

    V_host: = Subrtr (V_URL, A_POS1 + 2, A_POS2 - A_POS1 - 2);
    a_pos1: = uster (v_url, '?', a_pos2 + 1);

    Nếu a_pos1 = 0 thì
        v_path: = Subrtr (V_URL, A_POS2);
        TRỞ LẠI;
    Kết thúc nếu;

    V_Path: = Subrtr (V_URL, A_POS2, A_POS1 - A_POS2);
    V_Query: = Subrtr (V_URL, A_POS1 + 1);
KẾT THÚC;
$$ ngôn ngữ plpgsql;

Hàm này có thể được sử dụng như thế này:

Chọn * từ CS_PARSE_URL ('http://foobar.com/query.cgi?baz');

Ví dụ 36-8Hiển thị cách tỷ lệ kèo bóng đá tối nay một quy trình sử dụng nhiều các tính năng dành riêng cho Oracle.

23927_23974tỷ lệ kèo bóng đá tối nayđếnPL/PGSQL

Phiên bản tỷ lệ kèo bóng đá tối nay:

24136_24272(1)Bắt đầu
    Bảng khóa CS_JOBS ở chế độ độc quyền;(2)Chọn đếm (*) vào a_rasty_job_count từ cs_jobs trong đó end_stamp là null;

    Nếu a_rasty_job_count 0 thì
        LÀM; - Khóa miễn phí(3)24736_25160

Các quy trình như thế này có thể dễ dàng được tỷ lệ kèo bóng đá tối nay đổi thànhPostgreSQLtỷ lệ kèo bóng đá tối nay năng Trở vềvoid. Thủ tục này trong đặc biệt là thú vị bởi vì nó có thể dạy chúng ta một số đồ đạc:

(1)
Không cóPragma25654_25680PostgreSQL.
(2)
Nếu bạn làmBảng khóainPL/PGSQL, Khóa sẽ không được phát hành cho đến khi giao dịch gọi điện hoàn thành.
(3)
Bạn không thể phát hànhcam kếttrong APL/PGSQLHàm. Các tỷ lệ kèo bóng đá tối nay năng đang chạy trong một số giao dịch bên ngoài và vì vậycam kếtsẽ ngụ ý chấm dứt thực thi tỷ lệ kèo bóng đá tối nay năng. Tuy nhiên, trong đặc biệt này trường hợp dù sao thì nó cũng không cần thiết, vì khóa thu được bởiBảng khóaWill được phát hành khi chúng tôi gây ra lỗi.

Đây là cách chúng tôi có thể tỷ lệ kèo bóng đá tối nay thủ tục này đếnPL/PGSQL:

26841_27216(1)Kết thúc nếu;

    Xóa khỏi CS_Active_Job;
    Chèn vào các giá trị CS_Active_Job (Job_id) (v_job_id);

    BẮT ĐẦU
        Chèn vào các giá trị CS_JOBS (JOB_ID, start_stamp) (v_job_id, now ());
    NGOẠI LỆ
        Khi độc đáo_violation thì(2)27629_27715
(1)
Cú pháp củaNângIS khác biệt đáng kể so với tỷ lệ kèo bóng đá tối nay tương tự tuyên bố.
(2)
Tên ngoại lệ được hỗ trợ bởiPL/PGSQLkhác với tỷ lệ kèo bóng đá tối nay's. Tập hợp các tên ngoại lệ tích hợp là nhiều lớn hơn (xemkèo tỷ số bóng đá euro hôm nay: Tài liệu:). Hiện tại không có cách nào để tuyên bố Tên ngoại lệ do người dùng xác định.
Sự khác biệt chức năng chính giữa quy trình này và tương đương với tỷ lệ kèo bóng đá tối nay là khóa độc quyền trênCS_JOBSbảng sẽ được giữ cho đến khi Gọi giao dịch hoàn thành. Ngoài ra, nếu người gọi sau hủy bỏ (ví dụ do lỗi), ảnh hưởng của điều này thủ tục sẽ được cuộn trở lại.

36.11.2. Những thứ khác để xem Vì

Phần này giải thích một vài điều khác cần xem khi nào tỷ lệ kèo bóng đá tối nay Oracletỷ lệ kèo bóng đá tối naytỷ lệ kèo bóng đá tối nay năng thànhPostgreSQL.

36.11.2.1. Rollback ngầm Sau khi ngoại lệ

inPL/PGSQL, khi an Ngoại lệ bị bắt bởi mộtNgoại lệ29557_29613Bắt đầuđược tự động quay lại. Đó là, Hành vi này tương đương với những gì bạn nhận được trong tỷ lệ kèo bóng đá tối nay với

Bắt đầu
        SavePoint S1;
        ... Mã ở đây ...
    NGOẠI LỆ
        Khi ... sau đó
            Rollback sang S1;
            ... Mã ở đây ...
        Khi ... sau đó
            Rollback sang S1;
            ... Mã ở đây ...
    KẾT THÚC;

Nếu bạn đang dịch một quy trình tỷ lệ kèo bóng đá tối nay sử dụngSavePointrollback toTrong kiểu này, nhiệm vụ của bạn rất dễ dàng: Chỉ cần bỏ quaSavePointrollback to. Nếu bạn có một thủ tục sử dụng30397_30408rollback toTheo một cách khác thì một số suy nghĩ thực tế sẽ được yêu cầu.

36.11.2.2.thực thi

ThePL/PGSQLPhiên bảnthực thihoạt động tương tự nhưtỷ lệ kèo bóng đá tối nayphiên bản, nhưng bạn có Để nhớ sử dụngquote_literalquote_identnhư được mô tả trongPhần 36.6.5. Cấu trúc của loạiThực thi 'Chọn * từ $ 1';sẽ không hoạt động Trừ khi bạn sử dụng các tỷ lệ kèo bóng đá tối nay năng này.

36.11.2.3. tỷ lệ kèo bóng đá tối nay ưu hóaPL/PGSQLtỷ lệ kèo bóng đá tối nay năng

PostgreSQLcung cấp cho bạn hai Bộ điều chỉnh tạo tỷ lệ kèo bóng đá tối nay năng để tối ưu hóa thực thi:"Biến động"(Cho dù tỷ lệ kèo bóng đá tối nay năng Luôn trả về cùng một kết quả khi đưa ra các đối số giống nhau) Và"Sự nghiêm ngặt"(Cho dù Hàm trả về NULL nếu bất kỳ đối số là NULL). Tham khảo ý kiếnPostgreSQL: Tài liệu: 8.1: kèo bóngtrang tham chiếu để biết chi tiết.

Khi sử dụng các thuộc tính tỷ lệ kèo bóng đá tối nay ưu hóa này, bạnTạo tỷ lệ kèo bóng đá tối nay năngCâu lệnh có thể nhìn một cái gì đó như thế này:

Tạo hàm foo (...) Trả về số nguyên dưới dạng $$
...
$$ ngôn ngữ plpgsql nghiêm ngặt bất biến;

36.11.3. Phụ lục

Phần này chứa mã cho một bộ Tương thích tỷ lệ kèo bóng đá tối nay32536_32543chức năng mà bạn có thể sử dụng để đơn giản hóa các nỗ lực tỷ lệ kèo bóng đá tối nay đổi của mình.

32650_35671