PostgreSQL: kèo bóng đá hôm | |||
---|---|---|---|
Prev | UP | Chương 41.PL/PGSQL - kèo bóng đá hom nayNgôn ngữ thủ tục | Tiếp theo |
Phần này giải thích sự khác biệt giữaPostgreSQL'sPL/PGSQLNgôn ngữ và Oraclekèo bóng đá hom nayNgôn ngữ, để giúp các nhà phát triển kèo bóng đá hom nay đổi ứng dụng từOracle® đếnPostgreSQL.
PL/PGSQLtương tự như PL/SQL ở 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 và điều kiện là tương tự nhau. Sự khác biệt chính bạn nên ghi nhớ khi kèo bóng đá hom nay từkèo bóng đá hom nayđếnPL/PGSQLlà:
Nếu tên được sử dụng trong lệnh kèo bóng đá hom nay có thể là tên cột của bảng hoặc tham chiếu đến biến của hàm,kèo bóng đá hom naycoi nó là tên cột. Đ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ư được giải thích trongPhần 41.10.1. Tốt nhất là nên tránh những sự mơ hồ như vậy ngay từ đầu, nhưng nếu bạn phải kèo bóng đá hom nay một lượng lớn mã phụ thuộc vào hành vi này, cài đặtVarable_conflictcó thể là giải pháp tốt nhất.
inPostgreSQL12576_12726Phần 41.11.1.)
Tên loại dữ liệu thường cần dịch. Ví dụ: trong các giá trị chuỗi oracle thường được khai báo là loạiVarchar2, là loại không chuẩn kèo bóng đá hom nay. TRONGPostgreSQL, sử dụng loạiVarcharhoặcTextThay vào đó. Tương tự, thay thế loạiSốvớiSốhoặc sử dụng một số loại dữ liệu số khác nếu có một loại thích hợp hơn.
Thay vì các gói, hãy sử dụng các lược đồ để sắp xếp các chức kèo bóng đá hom nay của bạn thành các nhóm.
13400_13562
Số nguyênchovòng lặp vớiđảo ngượclàm việc khác nhau:kèo bóng đá hom nayĐếm xuống từ số thứ hai xuống số thứ nhất, trong khiPL/PGSQLĐếm xuống từ số thứ nhất xuống số thứ hai, yêu cầu giới hạn vòng lặp được hoán đổi khi kèo bóng đá hom nay. Sự không tương thích này là không may nhưng không có khả năng thay đổi. (Nhìn thấyPhần 41.6.3.5.)
choVòng lặp qua các truy vấn (trừ 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 đá hom nayLuôn tuyên bố chúng ngầm. Một lợi thế của điều này là các giá trị biến vẫn có thể truy cập được 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 các biến con trỏ.
Ví dụ 41-8Hiển thị cách kèo bóng đá hom nay chức năng đơn giản từkèo bóng đá hom nayđếnPL/PGSQL.
Ví dụ 41-8. kèo bóng đá hom nay một chức năng đơn giản từkèo bóng đá hom nayđếnPL/PGSQL
Đây là mộtOracle kèo bóng đá hom naychức kèo bóng đá hom nay:
Tạo hoặc thay thế chức kèo bóng đá hom nay CS_FMT_BROWSER_VESTER (V_NAME VARCHAR2, v_version varchar2) Trả về Varchar2 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 kèo bóng đá hom nay này và xem sự khác biệt so vớiPL/PGSQL:
tên loạiVarchar2phải được thay đổi thànhVarcharhoặcText. Trong các ví dụ trong phần này, chúng tôi sẽ sử dụngVarchar, nhưngTextthường là lựa chọn tốt hơn nếu bạn không cần giới hạn độ dài chuỗi cụ thể.
ThereturnTừ khóa trong nguyên mẫu chức kèo bóng đá hom nay (không phải cơ thể chức kèo bóng đá hom nay) trở thànhreturninPostgreSQL. Cũng,làtrở thànhASvà bạn cần thêm mộtNgôn ngữmệnh đề vìPL/PGSQLkhông phải là ngôn ngữ chức kèo bóng đá hom nay duy nhất có thể.
inPostgreSQL, cơ thể chức kèo bóng đá hom nay đượ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 tồn tại trongPostgreSQLvà 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 đá hom nay sangPostgreSQL:
Tạo hoặc thay thế chức kèo bóng đá hom nay 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ụ 41-917317_17426
Ví dụ 41-9. kèo bóng đá hom nay một hàm tạo chức năng khác từkèo bóng đá hom nayđếnPL/PGSQL
Quy trình sau lấy hàng từ AChọnCâu lệnh và xây dựng một chức kèo bóng đá hom nay lớn với kết quả trongnếuBáo cáo, vì lợi ích của hiệu quả.
Đâ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 kèo bóng đá hom nay cs_find_referrer_type (v_host trong varchar2, v_domain trong varchar2, v_url trong varchar2) return varchar2 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 kèo bóng đá hom nay này kết thúc trongPostgreSQL:
18811_19799
Lưu ý cách cơ thể của chức kèo bóng đá hom nay được xây dựng riêng biệt và được truyền quaquote_literalĐể tăng gấp đôi bất kỳ dấu nào trong đó. Kỹ thuật này là cần thiết bởi vì chúng tôi không thể sử dụng báo giá đô la một cách an toàn để xác định chức kèo bóng đá hom nay mới: Chúng tôi không biết chắc chắn những chuỗi nào sẽ được nội suy từgiới thiệu_key.key_stringTrường. (Chúng tôi đang giả sử ở đây rằnggiới thiệu_key.kindCó thể tin tưởng luôn luôn làmáy chủ, DOMAINhoặcurl, nhưnggiới thiệu_key.key_stringCó thể là bất cứ điều gì, đặc biệt là nó có thể chứa các dấu hiệu đô la.) Hàm này thực sự là một cải tiến trên Oracle gốc, vì nó sẽ không tạo ra mã bị hỏng khigiới thiệu_key.key_stringhoặcgiới thiệu_key.referrer_typechứa dấu ngoặc kép.
Ví dụ 41-10Hiển thị cách kèo bóng đá hom nay chức năng vớiOuttham số và thao tác chuỗi.PostgreSQLkhông có tích hợpuster
Hàm, nhưng bạn có thể tạo một cái bằng cách sử dụng kết hợp các chức kèo bóng đá hom nay khác. TRONGPhần 41.12.3Có mộtPL/PGSQLTriển khaiuster
mà bạn có thể sử dụng để làm cho việc kèo bóng đá hom nay đổi của bạn dễ dàng hơn.
Ví dụ 41-10. kèo bóng đá hom nay một thủ tục với thao tác chuỗi vàouttham số từkèo bóng đá hom nayđếnPL/PGSQL
sau đâyOracle21687_21782
Đây là phiên bản Oracle:
Tạo hoặc thay thế thủ tục CS_PARSE_URL ( v_url trong varchar2, v_host out varchar2, - điều này sẽ được truyền lại v_path out varchar2, - cái này cũng vậy v_query out varchar2) - 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ế chức kèo bóng đá hom nay 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ụ 41-11Hiển thị cách kèo bóng đá hom nay một quy trình sử dụng nhiều tính năng dành riêng cho Oracle.
Ví dụ 41-11. kèo bóng đá hom nay một thủ tục từkèo bóng đá hom nayđế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 A_Rasty_Job_Count Integer; Pragma tự trị_transaction;(1)Bắt đầu Bảng khóa CS_JOBS ở chế độ độc quyền;(2)24692_24847(3)24930_25368
Các quy trình như thế này có thể dễ dàng kèo bóng đá hom nay đổi thànhPostgreSQLchức kèo bóng đá hom nay trả vềvoid. Quy trình này đặc biệt rất thú vị vì nó có thể dạy chúng tôi một số điều:
Đây là cách chúng tôi có thể kèo bóng đá hom nay thủ tục này sangPL/PGSQL:
26761_27135(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 kèo bóng đá hom nay Oraclekèo bóng đá hom naychức kèo bóng đá hom nay đếnPostgreSQL.
inPL/PGSQL, khi một ngoại lệ bị bắt bởiNgoạ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. Nghĩa 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 một thủ tục Oracle sử dụngSavePointvàrollback toTheo 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ó một quy trình sử dụngSavePointvàrollback toTheo một cách khác thì một số suy nghĩ thực tế sẽ được yêu cầu.
The30388_30398Phiên bảnthực thihoạt động tương tự nhưkèo bóng đá hom nayPhiên bản, nhưng bạn phải nhớ sử dụngquote_literal
vàquote_ident
như được mô tả trongPhần 41.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 kèo bóng đá hom nay này.
PostgreSQLcung cấp cho bạn hai bộ sửa đổi tạo chức kèo bóng đá hom nay để tối ưu hóa thực thi:"Biến động"(Cho dù hàm luôn trả về cùng một kết quả khi đưa ra cùng một đối số) và"Sự nghiêm ngặt"(Cho dù hàm có trả về NULL hay không nếu bất kỳ đối số nào là NULL). Tham khảo ý kiếnTạo chức kèo bóng đá hom nayTrang 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 kèo bóng đá hom nayCâu lệnh có thể trông giống như thế này:
31693_31783
Phần này chứa mã cho một tập hợp tương thích oracleuster
Các chứ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 đá hom nay đổi của mình.
32125_35327