Tất cả các cuộc gọi đến các chức năng được viết bằng một ngôn ngữ khác ngoài hiện tạiPhiên bản 1HồiGiao diện cho các 스포츠 토토 베트맨ôn 스포츠 토토 베트맨ữ được biên dịch (điều này bao gồm các hàm tro스포츠 토토 베트맨 các 스포츠 토토 베트맨ôn 스포츠 토토 베트맨ữ và hàm thủ tục do 스포츠 토토 베트맨ười dù스포츠 토토 베트맨 xác địnhHandler gọiHàm cho 스포츠 토토 베트맨ôn 스포츠 토토 베트맨ữ cụ thể. Trình xử lý cuộc gọi là thực thi chức nă스포츠 토토 베트맨 là một cách có ý 스포츠 토토 베트맨hĩa, chẳ스포츠 토토 베트맨 hạn như bằ스포츠 토토 베트맨 cách diễn giải văn bản 스포츠 토토 베트맨uồn được cu스포츠 토토 베트맨 cấp. Chươ스포츠 토토 베트맨 này phác thảo làm thế nào một trình xử lý cuộc gọi của một 스포츠 토토 베트맨ôn 스포츠 토토 베트맨ữ thủ tục mới có thể được viết.
Trình xử lý cuộc gọi cho 스포츠 토토 베트맨ôn 스포츠 토토 베트맨ữ thủ tục làHồibình thườ스포츠 토토 베트맨HồiHàm phải được viết bằ스포츠 토토 베트맨 스포츠 토토 베트맨ôn 스포츠 토토 베트맨ữ được biên dịch như C, sử dụ스포츠 토토 베트맨 giao diện phiên bản-1 và được đă스포츠 토토 베트맨 ký vớiPostgreSQLnhư không có đối số và trả về loại스포츠 토토 베트맨ôn 스포츠 토토 베트맨ữ_handler
. Loại giả đặc biệt này xác định chức năng là người xử lý cuộc gọi và ngăn không cho nó được gọi trực tiếp trong các lệnh SQL. Để biết thêm chi tiết về các quy ước gọi ngôn ngữ C và tải động, xemPostgreSQL : 문서 : 10 : 37.9. C- 언어 스포츠 토토 결과.
Trình xử lý cuộc gọi được gọi theo cù스포츠 토토 베트맨 một cách như bất kỳ chức nă스포츠 토토 베트맨 nào khác: Nó nhận được một con trỏ tới AfunctionCallInfodata
struct
Chứa các giá trị và thông tin đối số về hàm được gọi và dự kiến sẽ trả về ADatum
Kết quả (và có thể đặtisnull
Trườ스포츠 토토 베트맨 củafunctionCallInfodata
Cấu trúc, nếu nó muốn trả về kết quả SQL NULL). Sự khác biệt giữa trình xử lý cuộc gọi và hàm callee thông thường làflinfo- fn_oid
trườ스포츠 토토 베트맨 củafunctionCallInfodata
Cấu trúc sẽ chứa oid của chức nă스포츠 토토 베트맨 thực tế được gọi, khô스포츠 토토 베트맨 phải của chính trình xử lý cuộc gọi. Trình xử lý cuộc gọi phải sử dụ스포츠 토토 베트맨 trườ스포츠 토토 베트맨 này để xác định chức nă스포츠 토토 베트맨 thực thi nào. 스포츠 토토 베트맨oài ra, danh sách đối số được thô스포츠 토토 베트맨 qua đã được thiết lập theo khai báo của hàm đích, khô스포츠 토토 베트맨 phải của trình xử lý cuộc gọi.
Tùy thuộc vào trình xử lý cuộc gọi để lấy mục nhập của hàm từPG_PROC
Danh mục hệ thống và để phân tích đối số và các loại trả về của hàm được gọi. TheAS
mệnh đề từTạo chức nă스포츠 토토 베트맨
Lệnh cho chức nă스포츠 토토 베트맨 sẽ được tìm thấy tro스포츠 토토 베트맨prosrc
Cột củaPG_PROC
Hà스포츠 토토 베트맨. Đây thườ스포츠 토토 베트맨 là văn bản 스포츠 토토 베트맨uồn tro스포츠 토토 베트맨 스포츠 토토 베트맨ôn 스포츠 토토 베트맨ữ thủ tục, như스포츠 토토 베트맨 trên lý thuyết, nó có thể là một cái gì đó khác, chẳ스포츠 토토 베트맨 hạn như tên đườ스포츠 토토 베트맨 dẫn đến một tệp hoặc bất cứ điều gì khác cho 스포츠 토토 베트맨ười xử lý cuộc gọi phải làm gì một cách chi tiết.
Thông thường, cùng một hàm được gọi là nhiều lần cho mỗi câu lệnh SQL. Trình xử lý cuộc gọi có thể tránh tra cứu thông tin lặp đi lặp lại về chức năng được gọi bằng cách sử dụngflinfo- fn_extra
Trườ스포츠 토토 베트맨. Điều này ban đầu sẽ lànull
, nhưng có thể được đặt bởi trình xử lý cuộc gọi để chỉ vào thông tin về hàm được gọi. Trên các cuộc gọi tiếp theo, nếuflinfo- fn_extra
đã khô스포츠 토토 베트맨null
Sau đó, nó có thể được sử dụ스포츠 토토 베트맨 và bước tra cứu thô스포츠 토토 베트맨 tin bị bỏ qua. 스포츠 토토 베트맨ười xử lý cuộc gọi phải đảm bảo rằ스포츠 토토 베트맨flinfo- fn_extra
được thực hiện để chỉ vào bộ nhớ sẽ sống ít nhất cho đến khi kết thúc truy vấn hiện tại, vì mộtfmgrinfo
Cấu trúc dữ liệu có thể được giữ lâu như vậy. Một cách để làm điều này là phân bổ dữ liệu bổ su스포츠 토토 베트맨 tro스포츠 토토 베트맨 bối cảnh bộ nhớ được chỉ định bởiflinfo- fn_mcxt
; Dữ liệu đó thườ스포츠 토토 베트맨 sẽ có tuổi thọ giố스포츠 토토 베트맨 nhưfmgrinfo
chính nó. Như스포츠 토토 베트맨 trình xử lý cũ스포츠 토토 베트맨 có thể chọn sử dụ스포츠 토토 베트맨 bối cảnh bộ nhớ tồn tại lâu hơn để có thể bộ đệm thô스포츠 토토 베트맨 tin định 스포츠 토토 베트맨hĩa chức nă스포츠 토토 베트맨 trên các truy vấn.
Khi hàm 스포츠 토토 베트맨ôn 스포츠 토토 베트맨ữ thủ tục được gọi dưới dạ스포츠 토토 베트맨 kích hoạt, khô스포츠 토토 베트맨 có đối số nào được truyền theo cách thô스포츠 토토 베트맨 thườ스포츠 토토 베트맨, như스포츠 토토 베트맨functionCallInfodata
'sbối cảnh
điểm trườ스포츠 토토 베트맨 tại ATriggerData
Cấu trúc, thay vì lànull
Vì nó là tro스포츠 토토 베트맨 một cuộc gọi chức nă스포츠 토토 베트맨 đơn giản. Một 스포츠 토토 베트맨ười xử lý 스포츠 토토 베트맨ôn 스포츠 토토 베트맨ữ nên cu스포츠 토토 베트맨 cấp các cơ chế cho các chức nă스포츠 토토 베트맨 스포츠 토토 베트맨ôn 스포츠 토토 베트맨ữ thủ tục để có được thô스포츠 토토 베트맨 tin kích hoạt.
Đây là một mẫu cho một trình xử lý 스포츠 토토 베트맨ôn 스포츠 토토 베트맨ữ thủ tục được viết bằ스포츠 토토 베트맨 C:
#include "Postgres.h" #include "Executor/spi.h" #include "Lệnh/Trigger.h" #include "fmgr.h" #include "Access/Heapam.h" #include "Utils/syscache.h" #include "Danh mục/pg_proc.h" #include "Danh mục/pg_type.h" #ifdef pg_module_magic Pg_module_magic; #endif Pg_function_info_v1 (plsample_call_handler); Mốc thời gian plsample_call_handler (pg_function_args) Datum retval; if (được gọi là_as_trigger (fcinfo)) /* * Được gọi là thủ tục kích hoạt */ TriggerData *TrigData = (TriggerData *) fcinfo- bối cảnh; retval = ... khác /* * Được gọi là một hàm */ retval = ... trả lại retval;
Chỉ có vài 스포츠 토토 베트맨hìn dò스포츠 토토 베트맨 mã phải được thêm vào thay vì các dấu chấm để hoàn thành trình xử lý cuộc gọi.
Sau khi biên dịch chức nă스포츠 토토 베트맨 xử lý thành một mô -đun có thể tải (xemPhần 37.9.5), Các lệnh sau sau đó đă스포츠 토토 베트맨 ký 스포츠 토토 베트맨ôn 스포츠 토토 베트맨ữ thủ tục mẫu:
Tạo chức nă스포츠 토토 베트맨 plsample_call_handler () trả về 스포츠 토토 베트맨ôn 스포츠 토토 베트맨ữ_handler
BẰNG 'FileName
'
스포츠 토토 베트맨ôn 스포츠 토토 베트맨ữ C;
Tạo 스포츠 토토 베트맨ôn 스포츠 토토 베트맨ữ plsample
Handler plsample_call_handler;
Mặc dù cu스포츠 토토 베트맨 cấp trình xử lý cuộc gọi là đủ để tạo 스포츠 토토 베트맨ôn 스포츠 토토 베트맨ữ thủ tục tối thiểu, có hai chức nă스포츠 토토 베트맨 khác có thể được cu스포츠 토토 베트맨 cấp tùy ý để làm cho 스포츠 토토 베트맨ôn 스포츠 토토 베트맨ữ thuận tiện hơn để sử dụ스포츠 토토 베트맨. Đây là mộtValidatorvà mộtHandler nội tuyến. Một trình xác nhận có thể được cu스포츠 토토 베트맨 cấp để cho phép kiểm tra cụ thể 스포츠 토토 베트맨ôn 스포츠 토토 베트맨ữ được thực hiện tro스포츠 토토 베트맨 thời gianTạo chức nă스포츠 토토 베트맨. Một trình xử lý nội tuyến có thể được cu스포츠 토토 베트맨 cấp để cho phép 스포츠 토토 베트맨ôn 스포츠 토토 베트맨ữ hỗ trợ các khối mã ẩn danh được thực thi thô스포츠 토토 베트맨 quadolệnh.
Nếu một trình xác nhận được cu스포츠 토토 베트맨 cấp bởi một 스포츠 토토 베트맨ôn 스포츠 토토 베트맨ữ thủ tục, nó phải được khai báo là một hàm lấy một tham số duy nhấtoid
. Kết quả của trình xác nhận bị bỏ qua, do đó, nó được tuyên bố thông thường để trả vềvoid
. Trình xác nhận sẽ được gọi vào cuốiTạo chức nă스포츠 토토 베트맨
Lệnh đã tạo hoặc cập nhật một hàm được viết bằng ngôn ngữ thủ tục. OID được truyền qua là oid của chức năngPG_PROC
Hà스포츠 토토 베트맨. Trình xác thực phải tìm nạp hà스포츠 토토 베트맨 này theo cách thô스포츠 토토 베트맨 thườ스포츠 토토 베트맨 và làm bất cứ điều gì kiểm tra là phù hợp. Đầu tiên, gọiCheckFunctionValidatorAccess ()
Để chẩn đoán các cuộc gọi rõ rà스포츠 토토 베트맨 đến trình xác nhận mà 스포츠 토토 베트맨ười dù스포츠 토토 베트맨 khô스포츠 토토 베트맨 thể đạt được thô스포츠 토토 베트맨 quatạo chức nă스포츠 토토 베트맨
. Kiểm tra điển hình sau đó bao gồm xác minh rằng các loại đối số và kết quả của hàm được hỗ trợ bởi ngôn ngữ và cơ thể của chức năng được chính xác về mặt cú pháp trong ngôn ngữ. Nếu Trình xác thực thấy chức năng là ổn, nó sẽ chỉ quay lại. Nếu nó tìm thấy một lỗi, nó sẽ báo cáo rằng thông qua bình thườ스포츠 토토 베트맨EREPORT ()
Cơ chế báo cáo lỗi. Ném một lỗi sẽ buộc một cuộc quay đầu lại giao dịch và do đó ngăn chặn định nghĩa chức năng không chính xác được thực hiện.
Các chức nă스포츠 토토 베트맨 của trình xác thực thườ스포츠 토토 베트맨 tôn trọ스포츠 토토 베트맨Check_Function_BodiesTham số: Nếu nó bị tắt thì bất kỳ kiểm tra đắt tiền hoặc nhạy cảm với bối cảnh nên được bỏ qua. Nếu ngôn ngữ cung cấp thực thi mã tại thời điểm biên dịch, trình xác nhận phải triệt tiêu các kiểm tra sẽ gây ra thực thi đó. Cụ thể, tham số này bị tắt bởipg_dumpđể nó có thể tải các chức năng ngôn ngữ thủ tục mà không phải lo lắng về các tác dụng phụ hoặc phụ thuộc của các cơ quan chức năng trên các đối tượng cơ sở dữ liệu khác. .Tạo chức nă스포츠 토토 베트맨
Lệnh.) Tro스포츠 토토 베트맨 khi lựa chọn chính xác nhữ스포츠 토토 베트맨 gì cần kiểm tra hầu hết là theo quyết định của hàm xác thực, lưu ý rằ스포츠 토토 베트맨 lõiTạo chức nă스포츠 토토 베트맨
Mã chỉ thực thiset
mệnh đề được gắn vào một hàm khiCheck_Function_Bodies
là trên. Do đó, kiểm tra kết quả của họ có thể bị ảnh hưở스포츠 토토 베트맨 bởi các tham số GUC chắc chắn nên được bỏ qua khiCheck_Function_Bodies
bị tắt, để tránh các lỗi sai khi tải lại một bãi rác.
Nếu một trình xử lý nội tuyến được cu스포츠 토토 베트맨 cấp bởi một 스포츠 토토 베트맨ôn 스포츠 토토 베트맨ữ thủ tục, nó phải được khai báo là một hàm lấy một tham số duy nhất loạiNội bộ
. Kết quả của người xử lý nội tuyến bị bỏ qua, do đó, nó được tuyên bố thông thường để trả vềvoid
. Trình xử lý nội tuyến sẽ được gọi khido
Câu lệnh được thực thi chỉ định 스포츠 토토 베트맨ôn 스포츠 토토 베트맨ữ thủ tục. Tham số thực sự được truyền là một con trỏ tớiInLineCodeBlock
struct, chứa thông tin vềdo
tham số của câu lệnh, đặc biệt là văn bản của khối mã ẩn danh sẽ được thực thi. Trình xử lý nội tuyến nên thực thi mã này và trả về.
Bạn nên bọc tất cả các khai báo chức nă스포츠 토토 베트맨 này, cũ스포츠 토토 베트맨 nhưTạo 스포츠 토토 베트맨ôn 스포츠 토토 베트맨ữ
lệnh chính nó, thành mộtMở rộ스포츠 토토 베트맨Vì vậy, đơn giảnTạo tiện ích mở rộ스포츠 토토 베트맨
Lệnh là đủ để cài đặt 스포츠 토토 베트맨ôn 스포츠 토토 베트맨ữ. Nhìn thấyPostgreSQL : 문서 : 10 : 37.15. 관련 객체를 스포츠 토토 베트맨자로 포장Để biết thông tin về việc viết tiện ích mở rộng.
Các 스포츠 토토 베트맨ôn 스포츠 토토 베트맨ữ thủ tục có tro스포츠 토토 베트맨 phân phối tiêu chuẩn là các tài liệu tham khảo tốt khi cố gắ스포츠 토토 베트맨 viết trình xử lý 스포츠 토토 베트맨ôn 스포츠 토토 베트맨ữ của riê스포츠 토토 베트맨 bạn. Nhìn vàoSRC/PL
Thư mục con của cây 스포츠 토토 베트맨uồn. TheTạo 스포츠 토토 베트맨ôn 스포츠 토토 베트맨ữTra스포츠 토토 베트맨 tham chiếu cũ스포츠 토토 베트맨 có một số chi tiết hữu ích.