Phiên bản được hỗ trợ:hiện tại(17) /16 / 15 / 14 / 13
4722_483318 / 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 / 7.3 / 7.2 / 7.1
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 một trang chohiện tạiPhiên bản hoặc một trong các phiên bản được hỗ trợ khác được liệt kê ở trên thay thế.

40.9. Quy trình kích kèo bóng đá cúp c2

40.9.1. Kích kèo bóng đá cúp c2 thay đổi dữ liệu

PL/PGSQLcó thể được sử dụng để xác định Thủ tục kích kèo bóng đá cúp c2. Một quy trình kích kèo bóng đá cúp c2 được tạo bằngTạo chức nănglệnh, khai báo nó là một chức năng không có đối số và loại trả về củaTrigger. Lưu ý rằng chức năng phải được khai báo với Không có đối số nào ngay cả khi nó dự kiến ​​sẽ nhận được các đối số được chỉ định trongTạo Trigger- Đối số kích kèo bóng đá cúp c2 là đã qua quaTG_ARGV, như mô tả dưới.

Khi APL/PGSQLHàm là được gọi là một trình kích kèo bóng đá cúp c2, một số biến đặc biệt được tạo tự động trong khối cấp cao nhất. Họ là:

new

Kiểu dữ liệuRecord; Biến đang giữ cái mới Hàng cơ sở dữ liệu choChèn/Cập nhậtkèo bóng đá cúp c2 động trong các kích kèo bóng đá cúp c2 cấp độ hàng. Cái này Biến không được chỉ định trong các kích kèo bóng đá cúp c2 cấp câu lệnh và choXóakèo bóng đá cúp c2 động.

Kiểu dữ liệuRecord; Biến đang giữ cái cũ Hàng cơ sở dữ liệu choCập nhật/Xóakèo bóng đá cúp c2 động trong các kích kèo bóng đá cúp c2 cấp độ hàng. Cái này Biến không được chỉ định trong các kích kèo bóng đá cúp c2 cấp câu lệnh và choChènkèo bóng đá cúp c2 động.

TG_NAME

Kiểu dữ liệutên; biến có chứa Tên của bộ kích kèo bóng đá cúp c2 thực sự bị bắn.

tg_when

Kiểu dữ liệuText; một chuỗitrước, sauhoặcthay vì, Tùy thuộc vào bộ kích kèo bóng đá cúp c2 sự định nghĩa.

TG_LEVEL

Kiểu dữ liệuText; một chuỗi củahànghoặccâu lệnhTùy thuộc vào định nghĩa của bộ kích kèo bóng đá cúp c2.

TG_OP

Kiểu dữ liệuText; một chuỗiChèn, Cập nhật, Xóahoặccắt ngắnKể cho kèo bóng đá cúp c2 động nào, kích kèo bóng đá cúp c2 đã được bắn.

TG_RELID

Kiểu dữ liệuoid; ID đối tượng của bảng gây ra lời mời kích kèo bóng đá cúp c2.

TG_RELNAME

Kiểu dữ liệutên; tên của bảng mà gây ra lời cầu khẩn kích kèo bóng đá cúp c2. Điều này hiện không được dùng nữa, và có thể biến mất trong một bản phát hành trong tương lai. Sử dụngTG_TABLE_NAMEThay vào đó.

TG_TABLE_NAME

Kiểu dữ liệutên; tên của bảng mà gây ra lời mời kích kèo bóng đá cúp c2.

tg_table_schema

Kiểu dữ liệutên; tên của lược đồ của bảng gây ra lời mời kích kèo bóng đá cúp c2.

TG_NARGS

Kiểu dữ liệuSố nguyên; số lượng đối số được trao cho quy trình kích kèo bóng đá cúp c2 trongTạo CÒ SÚNGcâu lệnh.

TG_ARGV []

Mảng kiểu dữ liệu củaText; các lập luận từ14457_1447314476_14572TG_NARGS) Kết quả là NULL giá trị.

Một chức năng kích kèo bóng đá cúp c2 phải trả vềnullhoặc giá trị bản ghi/hàng có chính xác Cấu trúc của bảng Trình kích kèo bóng đá cúp c2 đã được bắn cho.

Trình kích kèo bóng đá cúp c2 cấp hàng đã bắntrướccó thể trả về null để báo hiệu Trình quản lý kích kèo bóng đá cúp c2 để bỏ qua phần còn lại của kèo bóng đá cúp c2 động cho hàng này (tức là, các kích kèo bóng đá cúp c2 tiếp theo không được bắn, vàChèn/Cập nhật/XóaKhông xảy ra cho hàng này). Nếu một giá trị nonnull được trả về thì kèo bóng đá cúp c2 động tiến hành với giá trị hàng đó. Trả lại giá trị hàng khác với giá trị ban đầu củamớiThay đổi hàng sẽ được chèn hoặc cập nhật. Vì vậy, nếu Chức năng kích kèo bóng đá cúp c2 muốn hành động kích kèo bóng đá cúp c2 thành công bình thường mà không thay đổi giá trị hàng,mới(hoặc a Giá trị bằng nhau) phải được trả lại. Để thay đổi hàng Đã lưu trữ, có thể thay thế các giá trị đơn trực tiếp trongmớivà trả về sửa đổimớihoặc để xây dựng một bản ghi/hàng mới hoàn chỉnh để trở lại. Trong trường hợp trước kích kèo bóng đá cúp c2 trênXóa, giá trị trả về không có tác dụng trực tiếp, nhưng Nó phải là không phải để cho phép hành động kích kèo bóng đá cúp c2 được tiến hành. Ghi chú cái đómớilà null trongXóaTriggers, vì vậy việc trả lại thường không hợp lý. Thành ngữ thông thường trongXóaTriggers sẽ trở lại.

thay vìTriggers (luôn luôn Trình kích kèo bóng đá cúp c2 cấp độ hàng và chỉ có thể được sử dụng trên lượt xem) có thể trả về null để báo hiệu rằng họ đã không thực hiện bất kỳ bản cập nhật nào và phần còn lại của kèo bóng đá cúp c2 động cho hàng này nên được bỏ qua (tức là, sau đó Trình kích kèo bóng đá cúp c2 không bị bắn và hàng không được tính trong Trạng thái bị ảnh hưởng của hàng cho xung quanhChèn/Cập nhật/Xóa). Nếu không thì một giá trị không phải là trả lại, để báo hiệu rằng bộ kích kèo bóng đá cúp c2 đã thực hiện kèo bóng đá cúp c2 động. VìChènCập nhậtkèo bóng đá cúp c2 động, giá trị trả về phải làmới, mà hàm kích kèo bóng đá cúp c2 có thể sửa đổi Để hỗ trợChèn trả vềCập nhật trả về(Điều này cũng sẽ ảnh hưởng đến hàng Giá trị được truyền cho bất kỳ kích kèo bóng đá cúp c2 tiếp theo). VìXóakèo bóng đá cúp c2 động, giá trị trả về phải là.

Giá trị trả về của kích kèo bóng đá cúp c2 cấp hàng được bắnsauhoặc kích kèo bóng đá cúp c2 cấp độ tuyên bốtrướchoặcsauluôn luôn bỏ qua; Nó cũng có thể là NULL. Tuy nhiên, bất kỳ loại nào trong số này của Trình kích kèo bóng đá cúp c2 vẫn có thể hủy bỏ toàn bộ kèo bóng đá cúp c2 động bằng cách nâng cao lỗi.

Ví dụ 40-3Hiển thị một ví dụ về quy trình kích kèo bóng đá cúp c2 trongPL/PGSQL.

Ví dụ 40-3. MỘTPL/PGSQLQuy trình kích kèo bóng đá cúp c2

Ví dụ này kích kèo bóng đá cúp c2 đảm bảo rằng bất cứ khi nào một hàng được chèn hoặc Được cập nhật trong bảng, tên người dùng và thời gian hiện tại được đóng dấu vào hàng. Và nó kiểm tra xem tên của một nhân viên đã được đưa ra và rằng mức lương là một giá trị dương.

18165_19096

Một cách khác để nhật ký thay đổi vào bảng liên quan đến việc tạo ra một bản mới bảng giữ một hàng cho mỗi lần chèn, cập nhật hoặc xóa nó xảy ra. Cách tiếp cận này có thể được coi là kiểm toán thay đổi bàn.Ví dụ 40-4Hiển thị một ví dụ về quy trình kích kèo bóng đá cúp c2 kiểm toán trongPL/PGSQL.

Ví dụ 40-4. MỘTPL/PGSQLQuy trình kích kèo bóng đá cúp c2 để kiểm toán

Ví dụ này kích kèo bóng đá cúp c2 đảm bảo rằng mọi chèn, cập nhật hoặc xóa của một hàng trongEMPBảng được ghi lại (tức là, được kiểm toán) trongEMP_AUDIT19874_19993

Tạo bảng EMP (
    Empname văn bản không phải null,
    Số nguyên lương
);

Tạo bảng emp_audit (
    kèo bóng đá cúp c2 động Char (1) không phải NULL,
    dấu thời gian tem không phải null,
    văn bản userid không null,
    Empname văn bản không phải null,
    Số nguyên lương
);

Tạo hoặc thay thế chức năng process_emp_audit () trả về Trigger như $ emp_audit $
    BẮT ĐẦU
        -
        - Tạo một hàng trong EMP_Audit để phản ánh kèo bóng đá cúp c2 động được thực hiện trên EMP,
        - Sử dụng biến đặc biệt TG_OP để thực hiện thao tác.
        -
        If (tg_op = 'xóa') thì
            Chèn vào emp_audit Chọn 'd', bây giờ (), người dùng, cũ.*;
            Trả lại cũ;
        Elsif (tg_op = 'cập nhật') sau đó
            Chèn vào emp_audit Chọn 'u', bây giờ (), người dùng, mới.*;
            Trả lại mới;
        Elsif (tg_op = 'chèn') sau đó
            Chèn vào emp_audit Chọn 'i', bây giờ (), người dùng, mới.*;
            Trả lại mới;
        Kết thúc nếu;
        Trả lại null; - Kết quả bị bỏ qua vì đây là một kích kèo bóng đá cúp c2 sau
    KẾT THÚC;
$ emp_audit $ ngôn ngữ plpgsql;

Tạo Trigger EMP_AUDIT
Sau khi chèn hoặc cập nhật hoặc xóa trên EMP
    Đối với mỗi hàng thực thi quy trình quy trình_emp_audit ();

Một biến thể của ví dụ trước sử dụng chế độ xem tham gia vào chính bảng vào bảng kiểm toán, để hiển thị khi mỗi mục nhập cuối cùng sửa đổi. Cách tiếp cận này vẫn ghi lại dấu vết kiểm toán đầy đủ của các thay đổi trong bảng, nhưng cũng kèo bóng đá cúp c2 bày một cái nhìn đơn giản hóa kiểm toán đường mòn, chỉ hiển thị dấu thời gian sửa đổi cuối cùng có nguồn gốc từ Đường dẫn kiểm toán cho mỗi mục.Ví dụ 40-5Hiển thị ví dụ về kích kèo bóng đá cúp c2 kiểm toán trên chế độ xem trongPL/PGSQL.

Ví dụ 40-5. MỘTPL/PGSQLXem quy trình kích kèo bóng đá cúp c2 để kiểm toán

Ví dụ này sử dụng trình kích kèo bóng đá cúp c2 trên chế độ xem để làm cho nó có thể cập nhật, và đảm bảo rằng mọi chèn, cập nhật hoặc xóa hàng trong chế độ xem được ghi lại (tức là đã được kiểm toán) trongEMP_AUDITBảng. Thời gian hiện tại và tên người dùng là được ghi lại, cùng với loại kèo bóng đá cúp c2 động được thực hiện và Xem hiển thị thời gian sửa đổi cuối cùng của mỗi hàng.

22383_24081

Một cách sử dụng kích kèo bóng đá cúp c2 là duy trì bảng tóm tắt của người khác bàn. Tóm tắt kết quả có thể được sử dụng thay cho bản gốc Bảng cho các truy vấn nhất định - thường với thời gian chạy giảm rất nhiều. Kỹ thuật này thường được sử dụng trong kho dữ liệu, trong đó Các bảng dữ liệu đo hoặc quan sát (được gọi là bảng thực tế) có thể là cực kỳ lớn.Ví dụ 40-6Hiển thị một ví dụ về quy trình kích kèo bóng đá cúp c2 trongPL/PGSQLduy trì bảng tóm tắt cho một Bảng thực tế trong kho dữ liệu.

Ví dụ 40-6. MỘTPL/PGSQLQuy trình kích kèo bóng đá cúp c2 để duy trì bảng tóm tắt

lược đồ chi tiết ở đây một phần dựa trênCửa hàng tạp hóaVí dụ từKho dữ liệu Bộ công cụbởi Ralph Kimball.

25142_29715

40.9.2. Trình kích kèo bóng đá cúp c2 trên các sự kiện

PL/PGSQLcó thể được sử dụng để xác định Kích kèo bóng đá cúp c2 sự kiện.POSTGRESQLYêu cầu rằng một quy trình được gọi là kích kèo bóng đá cúp c2 sự kiện phải được khai báo là một hàm không có đối số và loại trả về củaevent_trigger.

Khi APL/PGSQLHàm là được gọi là kích kèo bóng đá cúp c2 sự kiện, một số biến đặc biệt được tạo tự động trong khối cấp cao nhất. Họ là:

TG_EVENT

Kiểu dữ liệuText; một chuỗi đại diện cho sự kiện kích kèo bóng đá cúp c2 được bắn cho.

TG_TAG

Kiểu dữ liệuText; biến có chứa Thẻ lệnh mà kích kèo bóng đá cúp c2 được kích kèo bóng đá cúp c2.

Ví dụ 40-7Hiển thị ví dụ về quy trình kích kèo bóng đá cúp c2 sự kiện trongPL/PGSQL.

31012_31030PL/PGSQLQuy trình kích kèo bóng đá cúp c2 sự kiện

Ví dụ này kích kèo bóng đá cúp c2 chỉ đơn giản là tăngThông báoThông báo mỗi khi lệnh được hỗ trợ được thực hiện.

Tạo hoặc thay thế hàm snitch () trả về event_trigger dưới dạng $$
BẮT ĐẦU
    Nâng cao thông báo 'snitch: % %', tg_event, tg_tag;
KẾT THÚC;
$$ Ngôn ngữ plpgsql;

Tạo sự kiện kích kèo bóng đá cúp c2 Snitch trên DDL_Command_Start Thủ tục thực thi Snitch ();