Để tạo kèo bóng đá c1 trong ngôn ngữ PL/Perl, sử dụng tiêu chuẩnTạo chức năngCú pháp:
Tạo chức năngfuncname
(Đối số-loại
) Trả vềReturn-Type
- Thuộc tính chức năng có thể vào đây Như $$ # kèo bóng đá c1 chức năng cơ thể đến đây $$ ngôn ngữ plperl;
Phần thân của hàm là mã perl thông thường. Trong thực tế, mã keo PL/Perl kết thúc nó bên trong một chương trình con Perl. kèo bóng đá c1 được gọi trong bối cảnh vô hướng, vì vậy nó không thể trả lại danh sách. Bạn có thể trả về các giá trị phi Scalar (mảng, bản ghi và bộ) bằng cách trả về một tham chiếu, như được thảo luận dưới đây.
Trong quy trình kèo bóng đá c1, bất kỳ giá trị trả về nào từ mã Perl đều bị bỏ qua.
kèo bóng đá c1 cũng hỗ trợ các khối mã ẩn danh được gọi bằngdoTuyên bố:
Do $$ # kèo bóng đá c1 Mã $$ ngôn ngữ plperl;
Một khối mã ẩn danh không nhận được đối số và bất kỳ giá trị nào mà nó có thể trả lại đều bị loại bỏ. Nếu không thì nó hoạt động giống như một kèo bóng đá c1.
11312_11687Biến "%s" sẽ không được chia sẻ
vàbiến "%s" không khả dụng
trongPerldiagTrang người đàn ông hoặc tìm kiếm trên Internet chokèo bóng đá c1 lồng nhau được đặt tên là chương trình conxông.
Cú pháp củaTạo chức năng
Lệnh yêu cầu cơ thể chức năng được viết dưới dạng hằng số chuỗi. Thường thuận tiện nhất khi sử dụng báo giá đô la (xemPhần 4.1.2.412380_12451E ''
, bạn phải tăng gấp đôi bất kỳ dấu nào đơn lẻ ('
) và Backslashes (\
) Được sử dụng trong phần thân của kèo bóng đá c1 (xemPhần 4.1.2.1).
Đối số và kết quả được xử lý như trong bất kỳ chương trình con kèo bóng đá c1 nào khác: Đối số được truyền trong@_
và giá trị kết quả được trả về vớireturn
hoặc là biểu thức cuối cùng được đánh giá trong kèo bóng đá c1.
Ví dụ: một kèo bóng đá c1 trả về lớn hơn của hai giá trị số nguyên có thể được định nghĩa là:
Tạo kèo bóng đá c1 perl_max (số nguyên, số nguyên) Trả về số nguyên dưới dạng $$ if ($ _ [0] $ _ [1]) return $ _ [0]; trả về $ _ [1]; $$ ngôn ngữ plperl;
Đối số sẽ được chuyển đổi từ mã hóa cơ sở dữ liệu thành UTF-8 để sử dụng bên trong kèo bóng đá c1, sau đó được chuyển đổi từ UTF-8 trở lại mã hóa cơ sở dữ liệu khi trả về.
Nếu giá trị null SQLđược chuyển đến kèo bóng đá c1, giá trị đối số sẽ xuất hiện dưới dạngkhông xác địnhHồiTrong kèo bóng đá c1. Định nghĩa chức năng trên sẽ không hoạt động rất độc đáo với các đầu vào null (trên thực tế, nó sẽ hoạt động như thể chúng là số 0). Chúng ta có thể thêmnghiêm ngặt
Định nghĩa chức năng để thực hiệnkèo bóng đá c1Làm điều gì đó hợp lý hơn: Nếu giá trị null được thông qua, kèo bóng đá c1 sẽ không được gọi cả, nhưng sẽ tự động trả về kết quả null. Ngoài ra, chúng tôi có thể kiểm tra các đầu vào không xác định trong cơ thể chức năng. Ví dụ: giả sử rằng chúng tôi muốnperl_max
Với một đối số NULL và một đối số không liên quan để trả về đối số không phải
Tạo kèo bóng đá c1 perl_max (số nguyên, số nguyên) Trả về số nguyên dưới dạng $$ của tôi ($ x, $ y) = @_; if (không xác định $ x) trả lại undef nếu không được xác định $ y; trả lại $ y; trả về $ x nếu không được xác định $ y; trả về $ x nếu $ x $ y; trả lại $ y; $$ ngôn ngữ plperl;
Như được hiển thị ở trên, để trả về giá trị null SQL từ kèo bóng đá c1, trả về giá trị không xác định. Điều này có thể được thực hiện cho dù chức năng có nghiêm ngặt hay không.
Bất cứ điều gì trong một đối số chức năng không phải là tham chiếu là một chuỗi, nằm trong tiêu chuẩnkèo bóng đá c1Biểu diễn văn bản bên ngoài cho kiểu dữ liệu liên quan. Trong trường hợp các loại văn bản hoặc số thông thường, kèo bóng đá c1 sẽ chỉ làm điều đúng đắn và người lập trình thường sẽ không phải lo lắng về nó. Tuy nhiên, trong các trường hợp khác, đối số sẽ cần phải được chuyển đổi thành một hình thức có thể sử dụng nhiều hơn trong kèo bóng đá c1. Ví dụ:decode_bytea
kèo bóng đá c1 có thể được sử dụng để chuyển đổi đối số loạibytea
thành nhị phân không được phân loại.
Tương tự, kèo bóng đá c1 giá trị được chuyển lại chokèo bóng đá c1phải ở định dạng biểu diễn văn bản bên ngoài. Ví dụ:encode_bytea
kèo bóng đá c1 có thể được sử dụng để thoát dữ liệu nhị phân cho giá trị trả về loạibytea
.
Một trường hợp đặc biệt quan trọng là kèo bóng đá c1 giá trị boolean. Như vừa nêu, hành vi mặc định chobool
Giá trị là chúng được chuyển sang kèo bóng đá c1 dưới dạng văn bản, do đó'T'
hoặc'F'
. Điều này có vấn đề, vì kèo bóng đá c1 sẽ không điều trị16164_16169
là sai! Có thể cải thiện vấn đề bằng cách sử dụngTransformKhăn(xemPostgreSQL: Tài). kèo bóng đá c1 biến đổi phù hợp được cung cấp bởibool_plperl
Phần mở rộng. Để sử dụng nó, cài đặt tiện ích mở rộng:
Tạo phần mở rộng bool_plperl; - hoặc bool_plperlu cho pl/perlu
Sau đó sử dụngTransform
Thuộc tính chức năng cho kèo bóng đá c1 lấy hoặc trả vềbool
, ví dụ:
Tạo chức năng perl_and (bool, bool) trả về bool Biến đổi cho loại bool Như $$ của tôi ($ a, $ b) = @_; trả về $ a && $ b; $$ ngôn ngữ plperl;
Khi biến đổi này được áp dụng,bool
Đối số sẽ được kèo bóng đá c1 xem là1
hoặc trống, do đó đúng đúng hoặc sai. Nếu kết quả kèo bóng đá c1 là loạibool
, nó sẽ đúng hay sai theo việc Perl sẽ đánh giá giá trị trả về là đúng. Các phép biến đổi tương tự cũng được thực hiện cho các đối số truy vấn boolean và kết quả của các truy vấn SPI được thực hiện bên trong kèo bóng đá c1 (Phần 45.3.1).
kèo bóng đá c1 có thể trả lạikèo bóng đá c1Mảng làm tài liệu tham khảo cho các mảng kèo bóng đá c1. Đây là một ví dụ:
17779_17934
kèo bóng đá c1 Passeskèo bóng đá c1mảng như một người may mắnkèo bóng đá c1 :: Inserver :: mảng
Đối tượng. Đối tượng này có thể được coi là tham chiếu mảng hoặc một chuỗi, cho phép khả năng tương thích ngược với mã kèo bóng đá c1 được viết chokèo bóng đá c1Phiên bản dưới 9.1 để chạy. Ví dụ:
Tạo hoặc thay thế chức năng Concat_array_elements (Text []) Trả về văn bản dưới dạng $$ $ arg của tôi = thay đổi; $ result của tôi = ""; trả về undef if (! định nghĩa $ arg); # như một tham chiếu mảng for (@$ arg) $ result. = $ _; # Cũng hoạt động như một chuỗi $ result. = $ arg; Trả về $ kết quả; $$ Ngôn ngữ plperl; Chọn Concat_Array_elements (mảng ['pl', '/', 'kèo bóng đá c1']);
Mảng đa chiều được biểu diễn dưới dạng tham chiếu đến các mảng tham chiếu theo chiều thấp hơn theo cách phổ biến cho mỗi lập trình viên kèo bóng đá c1.
Các đối số loại tổng hợp được chuyển đến kèo bóng đá c1 như các tài liệu tham khảo cho băm. Các khóa của băm là tên thuộc tính của loại tổng hợp. Đây là một ví dụ:
19126_19412
kèo bóng đá c1 có thể trả về kết quả loại tổng hợp bằng cách sử dụng cùng một cách tiếp cận: trả về một tham chiếu về một hàm băm có các thuộc tính cần thiết. Ví dụ:
Tạo loại testrowperl As (số nguyên F1, văn bản F2, văn bản F3); Tạo hoặc thay thế kèo bóng đá c1 perl_row () trả về testrowperl dưới dạng $$ return f2 = 'xin chào', f1 = 1, f3 = 'thế giới'; $$ Ngôn ngữ plperl; Chọn * từ perl_row ();
Bất kỳ cột nào trong kiểu dữ liệu kết quả được khai báo không có trong băm sẽ được trả về làm giá trị null.
Tương tự, kèo bóng đá c1 đối số đầu ra của kèo bóng đá c1 thủ tục có thể được trả về dưới dạng tham chiếu băm:
Tạo quy trình Perl_Triple (Inout a Integer, Inout B Integer) AS $$ của tôi ($ a, $ b) = @_; trả về a = $ a * 3, b = $ b * 3; $$ Ngôn ngữ plperl; Gọi Perl_Triple (5, 10);
20284_20524return_next
như được minh họa dưới đây. Lưu ý rằng sau lần cuốireturn_next
, bạn phải đặtreturn
hoặc (tốt hơn)Return Undef
.
Tạo hoặc thay thế chức năng perl_set_int (int) Trả về số nguyên setof là $$ foreach (0 .. $ _ [0]) return_next ($ _); trả lại Undef; $$ Ngôn ngữ plperl; Chọn * từ perl_set_int (5); Tạo hoặc thay thế kèo bóng đá c1 perl_set () Trả về setof testrowperl là $$ return_next (f1 = 1, f2 = 'xin chào', f3 = 'thế giới'); return_next (f1 = 2, f2 = 'hello', f3 = 'postgresql'); return_next (f1 = 3, f2 = 'xin chào', f3 = 'pl/perl'); trả lại Undef; $$ ngôn ngữ plperl;
Đối với kèo bóng đá c1 bộ kết quả nhỏ, bạn có thể trả về một tham chiếu đến một mảng có chứa vô hướng, tham chiếu đến mảng hoặc tham chiếu đến băm cho kèo bóng đá c1 loại đơn giản, loại mảng và loại tổng hợp, tương ứng. Dưới đây là một số ví dụ đơn giản về việc trả về toàn bộ kết quả được đặt làm tham chiếu mảng:
Tạo hoặc thay thế kèo bóng đá c1 perl_set_int (int) Trả về số nguyên setof AS $$ trả về [0 .. $ _ [0]]; $$ Ngôn ngữ plperl; Chọn * từ perl_set_int (5); Tạo hoặc thay thế kèo bóng đá c1 perl_set () trả về setof testrowperl dưới dạng $$ trở lại [ f1 = 1, f2 = 'xin chào', f3 = 'thế giới', f1 = 2, f2 = 'hello', f3 = 'postgresql', f1 = 3, f2 = 'xin chào', f3 = 'pl/perl' ]; $$ Ngôn ngữ plperl; Chọn * từ perl_set ();
Nếu bạn muốn sử dụngnghiêm ngặt
Pragma với mã của bạn, bạn có một vài tùy chọn. Để sử dụng toàn cầu tạm thời, bạn có thểSET
plperl.use_strict
Để đúng. Điều này sẽ ảnh hưởng đến kèo bóng đá c1 phần tổng hợp tiếp theo củakèo bóng đá c1kèo bóng đá c1, nhưng không phải là chức năng đã được biên dịch trong phiên hiện tại. Để sử dụng toàn cầu vĩnh viễn, bạn có thể đặtplperl.use_strict
Để đúng trongkèo bóng đá c1conf
Tệp.
Để sử dụng vĩnh viễn trong kèo bóng đá c1 chức năng cụ thể mà bạn có thể đặt đơn giản:
sử dụng nghiêm ngặt;
Ở đầu cơ thể chức năng.
Thetính năng
Pragma cũng có sẵn choSử dụng
Nếu kèo bóng đá c1 của bạn là phiên bản 5.10.0 trở lên.
Nếu bạn thấy bất cứ điều gì trong tài liệu không chính xác, không khớp Kinh nghiệm của bạn với tính năng cụ thể hoặc yêu cầu làm rõ thêm, Vui lòng sử dụngMẫu nàyĐể báo cáo vấn đề tài liệu.