Phiên bản được hỗ trợ:hiện tại(17) /16 / 15 / 14 / 13
Phiên bản phát triển:18 / Devel
Phiên bản không được hỗ trợ:12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4
Tài liệu này dành cho phiên bản không được hỗ trợ của PostgreSQL.
Bạn có thể muốn xem cùng kèo tỷ số bóng đá euro hôm nay trang chohiện tạiPhiên bản hoặc kèo tỷ số bóng đá euro hôm nay trong các phiên bản được hỗ trợ khác được liệt kê ở trên thay thế.

Chương 47. Viết a Người xử lý kèo tỷ số bóng đá euro hôm nay

Tất cả các cuộc gọi đến các chức năng được viết bằng kèo tỷ số bóng đá euro hôm nay ngữ khác hơn hiện tại"Phiên bản 1"Giao diện Đối với các ngôn ngữ được biên dịch (điều này bao gồm các chức năng trong định nghĩa người dùng kèo tỷ số bóng đá euro hôm nay, chức năng được viết bằng SQL và các chức năng Sử dụng giao diện ngôn ngữ được biên dịch phiên bản 0), đi quaHandler gọiHàm cho cụ thể kèo tỷ số bóng đá euro hôm nay ngữ. Trách nhiệm của người xử lý cuộc gọi là thực thi chức năng một cách có ý nghĩa, chẳng hạn như bằng cách diễn giải cung cấp văn bản nguồn. Chương này phác thảo cách một thủ tục mới Trình xử lý cuộc gọi của kèo tỷ số bóng đá euro hôm nay ngữ có thể được viết.

Trình xử lý cuộc gọi cho kèo tỷ số bóng đá euro hôm nay là"Bình thường"Hàm phải được viết trong A đã biên dịch kèo tỷ số bóng đá euro hôm nay ngữ như C, sử dụng giao diện phiên bản-1 và Đã đăng ký vớiPostgreSQLnhư Không có đối số và trả lại loạikèo tỷ số bóng đá euro hôm nay_handler. Kiểu mẫu đặc biệt này xác định chức năng như kèo tỷ số bóng đá euro hôm nay 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.

Trình xử lý cuộc gọi được gọi theo cách tương tự như bất kỳ người nào khác Chức năng: Nó nhận được kèo tỷ số bóng đá euro hôm nay con trỏ tớifunctionCallInfodata structChứa các giá trị và thông tin đối số về hàm được gọi và dự kiến ​​sẽ trả vềDatumKết quả (và có thể đặtisnulltrường củafunctionCallInfodatacấu trúc, nếu nó muốn trả về kết quả SQL NULL). Sự khác biệt giữa người xử lý cuộc gọi và kèo tỷ số bóng đá euro hôm nay hàm callee thông thường làflinfo- fn_oidTrường củafunctionCallInfodatacấu trúc sẽ chứa Oid của chức năng thực tế được gọi, không phải của người xử lý cuộc gọi chính nó. Người xử lý cuộc gọi phải sử dụng trường này để xác định cái nào chức năng để thực thi. Ngoài ra, danh sách đối số được thông qua đã được đặt lên theo tuyên bố của hàm mục tiêu, không phải người 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 chức năng Từ bảng hệ thốngPG_PROCvà Để phân tích đối số và các loại trả về của hàm được gọi. TheASmệnh đề từtạo chức nănglệnh cho chức năng sẽ tìm thấy trongprosrcCột củaPG_PROCHàng. Điều này là phổ biến văn bản nguồn bằng kèo tỷ số bóng đá euro hôm nay, nhưng về lý thuyết, nó có thể là một cái gì đó khác, chẳng hạn như tên đường dẫn đến một tệp hoặc bất cứ thứ gì khác nói với người xử lý cuộc gọi phải làm gì một cách chi tiết.

Thông thường, chức năng tương tự được gọi là nhiều lần cho mỗi SQL tuyên bố. kèo tỷ số bóng đá euro hôm nay người xử lý cuộc gọi có thể tránh các tra cứu lặp đi lặp lại thông tin về chức năng được gọi bằng cách sử dụngflinfo- fn_extraTrường. Điều này ban đầu sẽ lànull, nhưng có thể được đặt bởi cuộc gọi Trình xử lý để chỉ vào thông tin về chức năng được gọi. TRÊN Các cuộc gọi tiếp theo, nếuflinfo- fn_extrađã khôngnullSau đó, nó có thể được sử dụng và tra cứu thông tin Bước bỏ qua. Người xử lý cuộc gọi phải đảm bảo rằngflinfo- fn_extrađược thực hiện để chỉ vào bộ nhớ điều đó sẽ sống ít nhất cho đến khi kết thúc truy vấn hiện tại, vì MỘTfmgrinfoCấu trúc dữ liệu có thể Giữ lâu như vậy. kèo tỷ số bóng đá euro hôm nay cách để làm điều này là phân bổ dữ liệu bổ sung Trong bối cảnh bộ nhớ được chỉ định bởiflinfo- fn_mcxt; Dữ liệu như vậy sẽ bình thường có cùng tuổi thọ vớifmgrinfochính nó. Nhưng người xử lý cũng có thể chọn sử dụng bối cảnh bộ nhớ sống lâu hơn để có thể lưu trữ Thông tin định nghĩa chức năng trên các truy vấn.

Khi chức năng kèo tỷ số bóng đá euro hôm nay ngữ theo thủ tục được gọi như một kích hoạt, Không có đối số nào được truyền theo cách thông thường, nhưngfunctionCallInfodata'Sbối cảnhđiểm trường tại ATriggerDatacấu trúc, thay vì lànullVì nó là trong một cuộc gọi chức năng đơn giản. MỘT Trình xử lý kèo tỷ số bóng đá euro hôm nay ngữ nên cung cấp các cơ chế cho Các chức năng về kèo tỷ số bóng đá euro hôm nay ngữ theo quy trình để có được kích hoạt thông tin.

Đây là một mẫu cho một trình xử lý kèo tỷ số bóng đá euro hôm nay Trong 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"

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ủ kèo tỷ số bóng đá euro hôm nay 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 nghìn dòng 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 hàm xử lý thành kèo tỷ số bóng đá euro hôm nay tải có thể tải Mô -đun (xemPhần 33.9.6), The Các lệnh sau sau đó đăng ký thủ tục mẫu kèo tỷ số bóng đá euro hôm nay ngữ:

Tạo chức năng plsample_call_handler () trả về kèo tỷ số bóng đá euro hôm nay_handler
    BẰNG 'FileName'
    kèo tỷ số bóng đá euro hôm nay ngữ C;
Tạo kèo tỷ số bóng đá euro hôm nay ngữ plsample
    Handler plsample_call_handler;

Các kèo tỷ số bóng đá euro hôm nay có trong phân phối tiêu chuẩn là những tài liệu tham khảo tốt khi cố gắng viết trình xử lý cuộc gọi của riêng bạn. Nhìn vàoSRC/PLthư mục con cây nguồn.