Các chức năng trong kèo bóng đá pháp được khai báo thông qua tiêu chuẩnTạo chức năngCú pháp:
Tạo chức năngfuncname
(List arging
) Trả vềReturn-Type
như $$ # kèo bóng đá pháp chức năng cơ thể $$ ngôn ngữ plpythonu;
Cơ thể của một hàm chỉ đơn giản là một tập lệnh kèo bóng đá pháp. Khi hàm được gọi, các đối số của nó được truyền dưới dạng các phần tử của danh sáchargs
; Các đối số được đặt tên cũng được truyền dưới dạng các biến thông thường cho tập lệnh kèo bóng đá pháp. Việc sử dụng các đối số được đặt tên thường dễ đọc hơn. Kết quả được trả về từ mã kèo bóng đá pháp theo cách thông thường, vớireturn
hoặcnăng suất
(trong trường hợp câu lệnh kết quả). Nếu bạn không cung cấp giá trị trả về, kèo bóng đá pháp trả về mặc địnhKhông
. kèo bóng đá phápDịch kèo bóng đá pháp'sKhông
vào giá trị null SQL. Trong một thủ tục, kết quả từ mã kèo bóng đá pháp phải làKhông
(thường đạt được bằng cách kết thúc thủ tục mà không córeturn
câu lệnh hoặc bằng cách sử dụngreturn
câu không đối số); Nếu không, một lỗi sẽ được nêu ra.
Ví dụ: một kèo bóng đá pháp để trả về lớn hơn của hai số nguyên có thể được định nghĩa là:
Tạo chức năng pymax (A Integer, B Integer) Trả về số nguyên Như $$ Nếu a b: trả lại a trả lại b $$ ngôn ngữ plpythonu;
Mã kèo bóng đá pháp được đưa ra dưới dạng phần thân của định nghĩa hàm được chuyển thành hàm kèo bóng đá pháp. Ví dụ: các kết quả trên trong:
def __plpython_procedure_pymax_23456 (): Nếu a b: trả lại a trả lại b
Giả sử 23456 là OID được gán cho kèo bóng đá pháp củaPostgreSQL.
Các đối số được đặt làm biến toàn cầu. Do các quy tắc phạm vi của kèo bóng đá pháp, điều này có hậu quả tinh tế là một biến đối số không thể được gán lại bên trong hàm theo giá trị của một biểu thức liên quan đến chính tên biến, trừ khi biến được xác định lại là toàn cầu trong khối. Ví dụ: những điều sau sẽ không hoạt động:
Tạo chức năng pystrip (x văn bản) Trả về văn bản Như $$ x = x.strip () # lỗi trả lại x $$ ngôn ngữ plpythonu;
vì gán chox
làm chox
Một biến cục bộ cho toàn bộ khối, và vì vậyx
Ở phía bên phải của bài tập đề cập đến biến cục bộ chưa được chỉ địnhx
, không phải tham số chức năng kèo bóng đá pháp. Sử dụngtoàn cầu
Câu lệnh, điều này có thể được thực hiện để làm việc:
Tạo chức năng pystrip (x văn bản) Trả về văn bản Như $$ Toàn cầu x x = x.strip () # ok ngay bây giờ trả lại x $$ ngôn ngữ plpythonu;
Nhưng nên không dựa vào chi tiết triển khai này của kèo bóng đá pháp. Tốt hơn là coi các tham số chức năng là chỉ đọc.