Postgresql 8.2.23 Tài liệu | ||||
---|---|---|---|---|
prev | Backward nhanh | Chương 37.PL/PGSQL - SQLNgôn ngữ thủ tục | kèo bóng đá hom nay 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à kèo bóng đá hom naykèo bóng đá hom nayNgôn ngữ, để giúp các nhà phát triển Port các ứng dụng từkèo bóng đá hom 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 kèo bóng đá hom nay từkèo bóng đá hom nayđế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 kèo bóng đá hom nay 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.
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. kèo bóng đá hom 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.parameter_name. TRONGPL/PGSQL, thay vào đó bạn có thể Tránh xung đột bằng cách đủ điều kiện cột hoặc tên bảng.
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-6.)
inPostgreSQLThe kèo bóng đá hom 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ể kèo bóng đá hom nay 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 đá hom nay năng thành các nhóm.
13473_13647
Ví dụ 37-5Hiể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ụ 37-5. 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àkèo bóng đá hom nay kèo bóng đá hom naykèo bóng đá hom nay năng:
Tạo hoặc thay thế kèo bóng đá hom nay nă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;
14717_14792PL/PGSQL:
ThereturnTừ khóa trong Nguyên mẫu kèo bóng đá hom nay năng (không phải cơ thể kèo bóng đá hom nay năng) trở thànhreturninPostgreSQL. Cũng,là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ữ kèo bóng đá hom nay năng duy nhất có thể.
inPostgreSQL, The Cơ thể kèo bóng đá hom 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/Trong cách tiếp cận của kèo bóng đá hom nay.
TheHiển thị lỗiLệnh không không tồn tại trongPostgreSQL15861_15943
Đâ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ế kèo bóng đá hom 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ụ 37-6Hiển thị cách kèo bóng đá hom nay 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-6. kèo bóng đá hom nay một chức năng tạo ra Một 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ọnTuyên bố và xây dựng một kèo bóng đá hom nay 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 kèo bóng đá hom nay:
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ế kèo bóng đá hom nay 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 kèo bóng đá hom nay năng này kết thúc trongPOSTGRESQL:
18223_19350
Lưu ý cách cơ thể của kèo bóng đá hom 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 kèo bóng đá hom 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 kèo bóng đá hom 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ụ
37-7Hiể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 bằng cách sử dụng kết hợp các kèo bóng đá hom nay năng khác.inPhần
37.11.3Có mộtPL/PGSQLTriển khaiuster
mà bạn có thể sử dụng để thực hiện kèo bóng đá hom nay đổi của mình
dễ dàng hơn.
Ví dụ 37-7. kèo bóng đá hom nay một thủ tục với chuỗi Thao tác vàouttham số từkèo bóng đá hom nayđếnPL/PGSQL
saukèo bóng đá hom nayQuy trình kèo bóng đá hom 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 kèo bóng đá hom nay:
21680_22560
Đây là bản dịch có thể thànhPL/PGSQL:
Tạo hoặc thay thế kèo bóng đá hom 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;
kèo bóng đá hom nay năng này có thể được sử dụng như thế này:
23687_23753
Ví dụ 37-8Hiển thị cách kèo bóng đá hom nay 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-8. kèo bóng đá hom nay một thủ tục từkèo bóng đá hom nayđếnPL/PGSQL
Phiên bản kèo bóng đá hom nay:
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)24628_24783(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 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 đá hom nay đổi thànhPostgreSQLkèo bóng đá hom 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:
Đây là cách chúng tôi có thể kèo bóng đá hom nay thủ tục này đếnPL/PGSQL:
26972_27347(1)27429_27669(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 naykèo bóng đá hom nay năng choPOSTGRESQL.
inPL/PGSQL, khi an Ngoại lệ bị bắt bởi mộtNgoạ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 đá hom 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 kèo bóng đá hom nay 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ó một thủ tục 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.
ThePL/PGSQLPhiên bảnthực thihoạt động tương tự nhưkèo bóng đá hom nayphiên bản, nhưng bạn có
Để nhớ sử dụngquote_literal
vàquote_ident
như được mô tả trongPhần
37.6.5. Cấu trúc của loạiThực thi 'Chọn * từ $ 1';31339_31402
POSTGRESQLcung cấp cho bạn hai Bộ điều chỉnh tạo kèo bóng đá hom nay năng để tối ưu hóa thực thi:"Biến động"(Cho dù kèo bóng đá hom 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ếnTạo CHỨC NĂNGtrang 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 kèo bóng đá hom 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;
Phần này chứa mã cho một tập hợp
Tương thích kèo bóng đá hom nayuster
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.
32801_35822