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ế.

37.11. kèo bóng đá c1 từOraclekèo bóng đá c1

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

PL/PGSQL11638_11882kèo bóng đá c1đếnPL/PGSQLlà:

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

  • Bạn có thể quá tải tên kèo bóng đá c1 năng trongPostgreSQL. Điều này thường được sử dụng để làm việc xung quanh việc thiếu các tham số mặc định.

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

  • inPostgreSQLBạn cần thoát khỏi các trích dẫn đơn trong cơ thể kèo bóng đá c1 năng. Nhìn thấyPhần 37.2.1.

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

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

Ví dụ 37-2Hiển thị cách kèo bóng đá c1 chức năng đơn giản từkèo bóng đá c1đếnPL/PGSQL.

Ví dụ 37-2. kèo bóng đá c1 một chức năng đơn giản từkèo bóng đá c1đếnPL/PGSQL

Đây làOracle kèo bóng đá c1kèo bóng đá c1 năng:

13677_13919

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

  • PostgreSQLkhông đã đặt tên cho các tham số. Bạn phải bí danh rõ ràng Bên trong kèo bóng đá c1 năng của bạn.

  • Oraclecó thể cóin, outInouttham số được truyền đến các kèo bóng đá c1 năng.Inoutví dụ, có nghĩa là tham số sẽ nhận được một giá trị và trả về một giá trị khác.PostgreSQLchỉ cóintham số.

  • ThereturnTừ khóa trong Nguyên mẫu kèo bóng đá c1 năng (không phải cơ thể kèo bóng đá c1 năng) trở thànhreturninPOSTGRESQL.

  • inPostgreSQL,, các kèo bóng đá c1 năng được tạo bằng cách sử dụng các trích dẫn đơn lẻ là phân định cơ thể kèo bóng đá c1 năng, vì vậy bạn phải trốn thoát trích dẫn đơn bên trong cơ thể kèo bóng đá c1 năng.

  • The/Hiển thị lỗiLệnh không không tồn tại trongPostgreSQL.

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

15618_15908

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

Ví dụ 37-3. kèo bóng đá c1 một chức năng tạo ra Một chức năng khác từkèo bóng đá c1đếnPL/PGSQL

Quy trình sau lấy hàng từ AChọnTuyên bố và xây dựng một kèo bóng đá c1 năng lớn với kết quả trongnếuCâu lệnh, vì lợi ích của hiệu quả. Đặc biệt chú ý sự khác biệt trong con trỏ vàchoVòng lặp,

Đây là phiên bản Oracle:

Tạo hoặc thay thế quy trình 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;

    A_output varchar (4000); 
BẮT ĐẦU 
    A_OUTPUT: = 'Tạo hoặc thay thế kèo bóng đá c1 năng CS_FIND_REFERRER_TYPE (V_HOST IN VARCHAR, V_DOMAIN IN VARCHAR, 
v_url trong varchar) varchar trả về bắt đầu '; 

    Cho người giới thiệu_key trong giới thiệu_keys vòng lặp 
        a_output: = a_output || '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; 

    a_output: = a_output || 'Trả lại null; KẾT THÚC;'; 
    Thực hiện A_Output ngay lập tức; 
KẾT THÚC; 
/ 
Hiển thị lỗi;

Đây là cách kèo bóng đá c1 năng này kết thúc trongPostgreSQL:

17656_18918

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

Ví dụ 37-4. kèo bóng đá c1 một thủ tục với chuỗi Thao tác vàOuttham số từkèo bóng đá c1đếnPL/PGSQL

sau đâyOracleQuy trình kèo bóng đá c1 đượ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).PL/PGSQLCác kèo bóng đá c1 năng chỉ có thể trả về một giá trị. TRONGPostgreSQL, một Cách để làm việc xung quanh điều này là chia thủ tục trong ba các kèo bóng đá c1 năng khác nhau: một để trả lại máy chủ, một kèo bóng đá c1 năng khác cho đường dẫn và một đường dẫn khác cho truy vấn.

Đây là phiên bản Oracle:

20499_21379

Đây là cáchPL/PGSQLHàm trả về phần máy chủ có thể trông giống như:

Tạo hoặc thay thế kèo bóng đá c1 năng CS_PARSE_URL_HOST (VARCHAR) Trả về Varchar là '
TUYÊN BỐ
    bí danh V_URL với giá $ 1;
    v_host varchar;
    v_path varchar;
    Số nguyên A_POS1;
    Số nguyên A_POS2;
    Số nguyên A_POS3;
BẮT ĐẦU 
    v_host: = null; 
    a_pos1: = uster (v_url, '' // '');

    Nếu a_pos1 = 0 thì 
        TRỞ LẠI '''';  - Trả lại một khoảng trống
    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 v_host; 
    Kết thúc nếu; 

    V_host: = Subrtr (V_URL, A_POS1 + 2, A_POS2 - A_POS1 - 2); 
    Trả lại v_host; 
KẾT THÚC; 
'Ngôn ngữ plpgsql;

Ví dụ 37-5Hiển thị cách kèo bóng đá c1 một quy trình sử dụng nhiều các tính năng dành riêng cho Oracle.

Ví dụ 37-5. kèo bóng đá c1 một thủ tục từkèo bóng đá c1đếnPL/PGSQL

Phiên bản Oracle:

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 một công việc mới: một 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 sau đó null; - Đừng lo lắng nếu nó đã tồn tại(4)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 đá c1 đổi thànhPostgreSQLkèo bóng đá c1 năng trả lại mộtSố nguyên. 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ó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 cũng không thể có giao dịch trongPL/PGSQLkèo bóng đá c1 năng. Toàn bộ kèo bóng đá c1 năng (và các kèo bóng đá c1 năng khác được gọi từ đó) là được thực hiện trong một giao dịch vàPostgreSQLQuay lại giao dịch nếu có sự cố.
(4)
Ngoại lệ khi phải được thay thế bằng mộtnếucâu lệnh.

​​Đây là cách chúng tôi có thể kèo bóng đá c1 thủ tục này sangPL/PGSQL:

25579_26456(1)Kết thúc nếu;

    Trả lại 0;
KẾT THÚC;
'Ngôn ngữ plpgsql;
(1)
Lưu ý cách bạn có thể nêu ra thông báo (hoặc lỗi) trongPL/PGSQL.

37.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 kèo bóng đá c1 Oraclekèo bóng đá c1kèo bóng đá c1 năng choPostgreSQL.

37.11.2.1.thực thi

ThePL/PGSQLphiên bản củathực thihoạt động tương tự nhưkèo bóng đá c1phiên bản, nhưng bạn có Để nhớ sử dụngquote_literal (văn bản)QUOTE_STRING (văn bản)Như được mô tả trongPhần 37.6.4. 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 kèo bóng đá c1 năng này.

37.11.2.2. Tối ưu hóaPL/PGSQLkèo bóng đá c1 năng

PostgreSQLcung cấp cho hai bạn Bộ sửa đổi tạo kèo bóng đá c1 năng để tối ưu hóa thực thi: sự biến động (cho dù kèo bóng đá c1 năng luôn luôn trả về kết quả khi được đưa ra cùng một đối số) và"Sự nghiêm ngặt"(Cho dù kèo bóng đá c1 năng có trả về null nếu có bất kỳ đối số là null). Tham khảo ý kiến ​​mô tả củaTạo kèo bóng đá c1 năngĐể biết chi tiết.

Để sử dụng các thuộc tính tối ưu hóa này, của bạnTạo kèo bóng đá c1 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 là '
...
'Ngôn ngữ plpgsql nghiêm ngặt bất biến;

37.11.3. Phụ lục

Phần này chứa mã cho tương thích oracleusterchứ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 đá c1 đổi của bạn.

29354_32422