Postgresql 8.3.23 Tài liệu | ||||
---|---|---|---|---|
prev | Backward nhanh | Chương 38.PL/PGSQL - SQLNgôn ngữ thủ tục | tỷ lệ kèo bóng đá tiếp nhanh | Tiếp theo |
Phần này giải thích sự khác biệt giữaPostgreSQL'sPL/PGSQLNgôn ngữ và Oracletỷ lệ kèo bóng đáNgôn ngữ, để giúp các nhà phát triển Port các ứng dụng từOracle® đế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ừtỷ lệ kèo bóng đáđếnPL/PGSQLlà:
Không có giá trị mặc định cho các tham số trongPostgreSQL.
Bạn có thể quá tải tên chức tỷ lệ kèo bó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.
Nếu tên được sử dụng trong lệnh SQL có thể là tỷ lệ kèo bóng đá cột Tên của bảng hoặc tham chiếu đến tỷ lệ kèo bóng đá biến của hàm,tỷ lệ kèo bóng đácoi nó là tỷ lệ kèo bóng đá cột Tên, trong khiPL/PGSQLĐiều trị Nó như tỷ lệ kèo bóng đá tên biến. Tốt nhất là tránh những mơ hồ như vậy trong nơi đầu tiên, nhưng nếu cần thiết, bạn có thể sửa chúng bằng cách đủ điều kiện đúng cách tên mơ hồ. (Nhìn thấyPhần 38.10.1.)
Không cần con trỏ trong12984_12994, Chỉ cần đặt truy vấn vàochoTuyên bố. (Nhìn thấyVí dụ 38-6.)
inPostgreSQLThe Chức tỷ lệ kèo bó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ể chức tỷ lệ kèo bóng đá. (Nhìn thấyPhần 38.11.1.)
13533_13613
Vì không có gói Biến tỷ lệ kèo bóng đá 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:tỷ lệ kèo bóng đáĐếm xuống từ lần thứ hai số đến lần đầu tiên, trong khiPL/PGSQLđếm ngược 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 tỷ lệ kèo bóng đá. 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 38.6.3.5.)
Ví dụ 38-5Hiển thị cách tỷ lệ kèo bóng đá chức năng đơn giản từtỷ lệ kèo bóng đáđếnPL/PGSQL.
Ví dụ 38-5. tỷ lệ kèo bóng đá một chức năng đơn giản từtỷ lệ kèo bóng đáđếnPL/PGSQL
Đây là tỷ lệ kèo bóng đáOracle tỷ lệ kèo bóng đáchức tỷ lệ kèo bóng đá:
Tạo hoặc thay thế chức tỷ lệ kèo bóng đá cs_fmt_browser_version (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 tỷ lệ kèo bóng đá này và xem sự khác biệt so vớiPL/PGSQL:
ThereturnTừ khóa trong Nguyên mẫu chức tỷ lệ kèo bóng đá (không phải cơ thể chức tỷ lệ kèo bóng đá) trở thànhreturninPostgreSQL. Cũng,làtrở thànhAS,, và bạn cần thêm tỷ lệ kèo bóng đáNgôn ngữmệnh đề vìPL/PGSQLkhông phải là ngôn ngữ chức tỷ lệ kèo bóng đá duy nhất có thể.
inPostgreSQL, The Cơ thể chức tỷ lệ kèo bó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 Oracle.
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 đá sangPostgreSQL:
Tạo hoặc thay thế chức tỷ lệ kèo bó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ụ 38-6Hiển thị cách tỷ lệ kèo bóng đá 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ụ 38-6. tỷ lệ kèo bóng đá một chức năng tạo ra Một chức năng khác từtỷ lệ kèo bóng đáđếnPL/PGSQL
Quy trình sau lấy hàng từ AChọnTuyên bố và xây dựng một chức tỷ lệ kèo bó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ế 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 tỷ lệ kèo bó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;
18850_18894PostgreSQL:
18982_20109
Lưu ý cách cơ thể của chức tỷ lệ kèo bóng đá được xây dựng riêng biệt 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 Chức tỷ lệ kèo bó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ủ, 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 tỷ lệ kèo bóng đá thực sự là một cải tiến trên Oracle 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ụ
38-7Hiển thị cách tỷ lệ kèo bóng đá chức năng vớiouttham số và thao tác chuỗi.PostgreSQLkhông có
tích hợpuster
21481_21560in21665_21686Có tỷ lệ kèo bóng đáPL/PGSQLTriển khaiuster
mà bạn có thể sử dụng để thực hiện tỷ lệ kèo bóng đá đổi của mình
dễ dàng hơn.
Ví dụ 38-7. tỷ lệ kèo bóng đá một thủ tục với chuỗi Thao tác vàout22071_22096tỷ lệ kèo bóng đáđếnPL/PGSQL
sauOracleQuy trình tỷ lệ kèo bóng đá đượ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 Oracle:
22439_23319
Đây là bản dịch có thể thànhPL/PGSQL:
Tạo hoặc thay thế chức tỷ lệ kèo bó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ụ 38-8Hiển thị cách tỷ lệ kèo bóng đá một quy trình sử dụng nhiều các tính năng dành riêng cho Oracle.
Ví dụ 38-8. tỷ lệ kèo bóng đá một thủ tục từtỷ lệ kèo bóng đáđế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 tỷ lệ kèo bóng đá công việc mới: tỷ lệ kèo bóng đá 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
26065_26123PostgreSQLchức tỷ lệ kèo bó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 tỷ lệ kèo bóng đá số đồ đạc:
Đây là cách chúng tôi có thể tỷ lệ kèo bóng đá thủ tục này đếnPL/PGSQL:
27731_28106(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;
Phần này giải thích một vài điều khác cần xem khi tỷ lệ kèo bóng đá Oracletỷ lệ kèo bóng đáchức tỷ lệ kèo bóng đá thànhPostgreSQL.
inPL/PGSQL, khi tỷ lệ kèo bóng đá Ngoại lệ bị bắt bởi tỷ lệ kèo bóng đáNgoạ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 Oracle 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 tỷ lệ kèo bóng đá quy trình Oracle sử dụngSavePointvàrollback toTrong kiểu này, nhiệm vụ của bạn rất dễ dàng: Chỉ cần bỏ quaSavePointvàrollback to. Nếu bạn có tỷ lệ kèo bóng đá thủ tục sử dụngSavePointvàrollback toTheo tỷ lệ kèo bóng đá cách khác thì tỷ lệ kèo bóng đá số suy nghĩ thực tế sẽ được yêu cầu.
ThePL/PGSQLphiên bản củathực thihoạt động tương tự nhưtỷ lệ kèo bóng đáphiên bản, nhưng bạn có
Để nhớ sử dụngquote_literal
vàQUOTE_IDENT
như được mô tả trongPhần
38.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 tỷ lệ kèo bóng đá này.
POSTGRESQLcung cấp cho bạn hai Bộ điều chỉnh tạo chức tỷ lệ kèo bóng đá để tối ưu hóa thực thi:"Biến động"(Cho dù chức tỷ lệ kèo bó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:trang tham chiếu để 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 tỷ lệ kèo bóng đáCâu lệnh có thể nhìn tỷ lệ kèo bóng đá 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;
Phần này chứa mã cho tỷ lệ kèo bóng đá bộ
Tương thích oracleuster
chứ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 đá đổi của mình.
33561_36582