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 kèo bóng đá hôm nay và ngày mai trang chohiện tạiPhiên bản hoặc kèo bóng đá hôm nay và ngày mai trong các phiên bản được hỗ trợ khác được liệt kê ở trên thay thế.

39.12. kèo bóng đá hôm nay và ngày mai từkèo bóng đá hôm nay và ngày maikèo bóng đá hôm nay và ngày mai

Phần này giải thích sự khác biệt giữaPostgreSQL'sPL/PGSQL11358_11383kèo bóng đá hôm nay và ngày maiNgôn ngữ, để giúp các nhà phát triển Port các ứng dụng từkèo bóng đá hôm nay và ngày mai® đế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 kèo bóng đá hôm nay và ngày mai từkèo bóng đá hôm nay và ngày maiđếnPL/PGSQLlà:

  • Nếu kèo bóng đá hôm nay và ngày mai tên được sử dụng trong lệnh SQL có thể là kèo bóng đá hôm nay và ngày mai cột Tên của bảng hoặc tham chiếu đến kèo bóng đá hôm nay và ngày mai biến của hàm,kèo bóng đá hôm nay và ngày maicoi nó là kèo bóng đá hôm nay và ngày mai cột tên. Điều này tương ứng vớiPL/PGSQL'splpgsql.varable_conflict=use_columnHành vi, không phải là mặc định, Như đã giải thích trongPhần 39.10.1. Thường tốt nhất là tránh những sự mơ hồ như vậy trong vị trí đầu tiên, nhưng nếu bạn phải kèo bóng đá hôm nay và ngày mai một lượng lớn mã Điều đó phụ thuộc vào hành vi này, cài đặtVarable_conflictcó thể là tốt nhất giải pháp.

  • inPostgreSQLThe Chức năng cơ thể phải được viết như kèo bóng đá hôm nay và ngày mai 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ể chức năng. (Nhìn thấyPhần 39.11.1.)

  • Thay vì các gói, hãy sử dụng các lược đồ để sắp xếp Chức năng thành các nhóm.

  • Vì không có gói Biến kèo bóng đá hôm nay và ngày mai 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.

  • Số nguyênchoVòng lặp vớiđảo ngượclàm việc khác nhau:kèo bóng đá hôm nay và ngày maiĐếm xuống từ lần thứ hai số đến lần đầu tiên, trong khiPL/PGSQLĐếm xuống từ lần đầu tiên số đến thứ hai, yêu cầu giới hạn vòng lặp được hoán đổi Khi kèo bóng đá hôm nay và ngày mai. Sự không tương thích này là không may nhưng là Không có khả năng được thay đổi. (Nhìn thấyPhần 39.6.3.5.)

  • chovòng lặp qua các truy vấn (khác hơn con trỏ) cũng hoạt động khác nhau: biến mục tiêu Phải được khai báo, trong khikèo bóng đá hôm nay và ngày maiLuôn tuyên bố chúng ngầm. kèo bóng đá hôm nay và ngày mai lợi thế của điều này là các giá trị biến vẫn còn có thể truy cập sau khi vòng lặp thoát.

  • Có nhiều sự khác biệt về chứng minh cho việc sử dụng Biến con trỏ.

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

Ví dụ 39-7Hiển thị cách kèo bóng đá hôm nay và ngày mai chức năng đơn giản từkèo bóng đá hôm nay và ngày maiđếnPL/PGSQL.

Ví dụ 39-7. kèo bóng đá hôm nay và ngày mai một chức năng đơn giản từkèo bóng đá hôm nay và ngày maiđếnPL/PGSQL

Đây là kèo bóng đá hôm nay và ngày maikèo bóng đá hôm nay và ngày mai kèo bóng đá hôm nay và ngày maichức năng:

Tạo hoặc thay thế chức 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 chức năng này và xem sự khác biệt so vớiPL/PGSQL:

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

  • inPostgreSQL, The Cơ thể chức năng được coi là kèo bóng đá hôm nay và ngày mai 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/Trong cách tiếp cận của kèo bóng đá hôm nay và ngày mai.

  • 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 kèo bóng đá hôm nay và ngày mai sangPostgreSQL:

16966_17262

Ví dụ 39-8Hiển thị cách kèo bóng đá hôm nay và ngày mai chức năng 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ụ 39-8. kèo bóng đá hôm nay và ngày mai một chức năng tạo ra Một chức năng khác từkèo bóng đá hôm nay và ngày maiđếnPL/PGSQL

Quy trình sau lấy hàng từ AChọnTuyên bố và xây dựng kèo bóng đá hôm nay và ngày mai chức năng lớn với kết quả trongnếuCâu lệnh, vì lợi ích của hiệu quả.

Đây là phiên bản kèo bóng đá hôm nay và ngày mai:

Tạo hoặc thay thế thủ tục CS_UPDATE_REFERRER_TYPE_PROC IS
    Giới thiệu con trỏ_Keys là
        Chọn * Từ CS_Referrer_Keys
        Đặt hàng bởi try_order;
    func_cmd varchar (4000);
BẮT ĐẦU
    func_cmd: = 'Tạo hoặc thay thế chức năng cs_find_referrer_type (v_host trong varchar,
                 v_domain trong varchar, v_url trong varchar) return varchar là bắt đầu ';

    Cho người giới thiệu_key trong giới thiệu_keys vòng lặp
        func_cmd: = func_cmd ||
          'Nếu v_' || giới thiệu_key.kind
          || 'Thích' '' || giới thiệu_key.key_string
          || '' 'Sau đó trả về' '' || giới thiệu_key.referrer_type
          || '' '; Kết thúc nếu; ';
    Kết thúc vòng lặp;

    func_cmd: = func_cmd || 'Trả lại null; KẾT THÚC;';

    Thực hiện func_cmd ngay lập tức;
KẾT THÚC;
/
Hiển thị lỗi;

Đây là cách chức năng này kết thúc trongPOSTGRESQL:

18947_19937

Lưu ý cách cơ thể của chức năng được xây dựng riêng biệt và đi quaquote_literal20071_20298giớ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ủ, DOMAINhoặ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 kèo bóng đá hôm nay và ngày mai 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ụ 39-9Hiển thị cách kèo bóng đá hôm nay và ngày mai chức năng vớiouttham số và thao tác chuỗi.PostgreSQLkhông có tích hợpusterHàm, nhưng bạn có thể tạo kèo bóng đá hôm nay và ngày mai bằng cách sử dụng kết hợp các chức năng khác. TRONGPhần 39.12.3Có kèo bóng đá hôm nay và ngày maiPL/PGSQLTriển khaiustermà bạn có thể sử dụng để thực hiện kèo bóng đá hôm nay và ngày mai đổi của mình dễ dàng hơn.

Ví dụ 39-9. kèo bóng đá hôm nay và ngày mai một thủ tục với chuỗi Thao tác vàouttham số từkèo bóng đá hôm nay và ngày maiđếnPL/PGSQL

sau đâykèo bóng đá hôm nay và ngày maiQuy trình kèo bóng đá hôm nay và ngày mai đượ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 kèo bóng đá hôm nay và ngày mai:

22224_23104

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

23243_24139

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ụ 39-1024393_24486

Ví dụ 39-10. kèo bóng đá hôm nay và ngày mai một thủ tục từkèo bóng đá hôm nay và ngày maiđếnPL/PGSQL

Phiên bản kèo bóng đá hôm nay và ngày mai:

Tạo hoặc thay thế thủ tục CS_CREATE_JOB (V_JOB_ID in Integer) IS IS
    A_Rasty_Job_Count Integer;
    Pragma tự trị_transaction;(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)RAISE_APPLICATION_ERROR (-20000,
                 'Không thể tạo kèo bóng đá hôm nay và ngày mai công việc mới: kèo bóng đá hôm nay và ngày mai công việc hiện đang chạy.');
    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, sysdate);
    NGOẠI LỆ
        Khi DUP_VAL_ON_INDEX thì NULL; - Đừng lo lắng nếu nó đã tồn tại
    KẾT THÚC;
    LÀM;
KẾT THÚC;
/
Hiển thị lỗi

Các quy trình như thế này có thể dễ dàng kèo bóng đá hôm nay và ngày mai đổi thànhPostgreSQLchức 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 kèo bóng đá hôm nay và ngày mai số đồ đạc:

(1)
Không cóPragmaTuyên bố TRONGPostgreSQL.
(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 chức năng đang chạy trong kèo bóng đá hôm nay và ngày mai số giao dịch bên ngoài và vì vậycam kếtsẽ ngụ ý chấm dứt thực thi chức 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ể kèo bóng đá hôm nay và ngày mai thủ tục này đếnPL/PGSQL:

27535_27910(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)- Đừng lo lắng nếu nó đã tồn tại
    KẾT THÚC;
KẾT THÚC;
$$ ngôn ngữ plpgsql;
28570_28575
Cú pháp củaNângIS khác biệt đáng kể so với tuyên bố của kèo bóng đá hôm nay và ngày mai, mặc dù trường hợp cơ bảnNâng EXABY_NAMEhoạt động Tương tự.
(2)
Tên ngoại lệ được hỗ trợ bởiPL/PGSQLkhác với kèo bóng đá hôm nay và ngày mai's. Tập hợp các tên ngoại lệ tích hợp là nhiều lớn hơn (xemPostgreSQL: Tài). 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, mặc dù bạn có thể ném Thay vào đó, các giá trị sqlstate chọn người dùng.
Sự khác biệt chức năng chính giữa quy trình này và tương đương với kèo bóng đá hôm nay và ngày mai 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.

39.12.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 kèo bóng đá hôm nay và ngày mai Oraclekèo bóng đá hôm nay và ngày maiCác chức năng thànhPostgreSQL.

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

inPL/PGSQL, khi kèo bóng đá hôm nay và ngày mai Ngoại lệ bị bắt bởi kèo bóng đá hôm nay và ngày maiNgoại lệmệnh đề, tất cả các thay đổi cơ sở dữ liệu kể từ khi khốiBắ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 kèo bóng đá hôm nay và ngày mai với:

30696_30896

Nếu bạn đang dịch một quy trình kèo bóng đá hôm nay và ngày mai 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ó kèo bóng đá hôm nay và ngày mai thủ tục sử dụngSavePointrollback toTheo kèo bóng đá hôm nay và ngày mai cách khác thì kèo bóng đá hôm nay và ngày mai số suy nghĩ thực tế sẽ được yêu cầu.

39.12.2.2.thực thi

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

39.12.2.3. Tối ưu hóaPL/PGSQLChức năng

POSTGRESQLcung cấp cho bạn hai Bộ điều chỉnh tạo chức năng để tối ưu hóa thực thi:"biến động"(Cho dù chức năng Luôn trả về cùng kèo bóng đá hôm nay và ngày mai kết quả khi đưa ra các đối số giống nhau) Và"Sự nghiêm ngặt"32666_32754Tạo chức năngTrang tham khảo để biết chi tiết.

Khi sử dụng các thuộc tính tối ưu hóa này, của bạnTạo chức năngCâu lệnh có thể nhìn kèo bóng đá hôm nay và ngày mai 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;

39.12.3. Phụ lục

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

33512_36532