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 choPostgreSQL : 문서 : 17 : 42.6. PL/토토 베이에서의 트리거 기능Phiê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.6. Quy trình kích hoạt trong PL/사설 토토

Quy trình kích hoạt có thể được viết bằng PL/사설 토토.PostgreSQLyêu cầu một quy trình là được gọi là một kích hoạt phải được khai báo là một hàm không có Đối số và loại trả về củaTrigger.

Thông tin từ Trình quản lý kích hoạt được chuyển cho Cơ quan thủ tục trong các biến sau:

$ tg_name

Tên của bộ kích hoạt từTạo Triggercâu lệnh.

$ tg_relid

ID đối tượng của bảng gây ra kích hoạt thủ tục được gọi.

$ tg_table_name

Tên của bảng gây ra quy trình kích hoạt được gọi.

$ tg_table_schema

lược đồ của bảng gây ra kích hoạt thủ tục được gọi.

$ tg_relatts

Một danh sách 사설 토토 của tên cột bảng, được đặt trước với một yếu tố danh sách trống. Vì vậy, tìm kiếm một tên cột trong danh sách với사설 토토'sLsearchlệnh trả về phần tử của phần tử Số bắt đầu bằng 1 cho cột đầu tiên, theo cùng một cách Các cột được đánh số theo sốPostgreSQL. (Các yếu tố danh sách trống cũng xuất hiện ở vị trí của các cột đã bị rơi, để việc đánh số thuộc tính là chính xác cho các cột quyền của họ.)

$ tg_when

chuỗitrước, sauhoặcThay vào đó CỦA, Tùy thuộc vào loại sự kiện kích hoạt.

$ tg_level

chuỗihànghoặccâu lệnhTùy thuộc vào loại kích hoạt sự kiện.

$ tg_op

chuỗiChèn, Cập nhật, Xóahoặccắt ngắnTùy thuộc vào loại sự kiện kích hoạt.

$ new

Một mảng kết hợp chứa các giá trị của cái mới Hàng bảng choChènhoặcCập nhậthành động hoặc trống choXóa. Mảng được lập chỉ mục bằng tên cột. Các cột là NULL sẽ không xuất hiện trong mảng. Đây là không đặt cho các kích hoạt cấp câu lệnh.

$ cũ

Một mảng kết hợp chứa các giá trị của cái cũ Hàng bảng choCập nhậthoặcXóaHành động hoặc trống choChèn. Mảng được lập chỉ mục bằng tên cột. Các cột là NULL sẽ không xuất hiện trong mảng. Đây là không đặt cho các kích hoạt cấp câu lệnh.

$ args

Một danh sách 사설 토토 của các đối số cho quy trình như được đưa ra trong TheTạo TriggerTuyên bố. Những đối số này cũng có thể truy cập được là$ 1 ... $nTrong cơ thể thủ tục.

Giá trị trả về từ quy trình kích hoạt có thể là một trong những chuỗiOKhoặcBỏ quahoặc danh sách các cặp tên/giá trị cột. Nếu Giá trị trả về làOK, Hoạt động (Chèn/Cập nhật/Xóa) đã bắn Trình kích hoạt sẽ tiến hành bình thường.Bỏ quaNói với trình quản lý kích hoạt để âm thầm triệt tiêu hoạt động cho Hàng này. Nếu một danh sách được trả về, nó sẽ yêu cầu PL/사설 토토 trả về Hàng sửa đổi cho Trình quản lý kích hoạt; Nội dung của các sửa đổi Hàng được chỉ định bởi các tên và giá trị cột trong danh sách. Bất kì Các cột không được đề cập trong danh sách được đặt thành NULL. Trả lại a Hàng sửa đổi chỉ có ý nghĩa đối với cấp độ hàngtrước ChènhoặcCập nhậtTriggers, trong đó đã sửa đổi Hàng sẽ được chèn thay vì hàng được đưa ra trong$ new; hoặc cho cấp độ hàngThay vào đó CỦA ChènhoặcCập nhậtTrình kích hoạt trong đó hàng được trả lại được sử dụng làm dữ liệu nguồn choChèn trả vềhoặcCập nhật trả vềmệnh đề. Trong cấp độ hàngtrước Xóahoặcthay vì XóaTriggers, trả về một hàng sửa đổi có Hiệu ứng tương tự như trả lạiOK, đó là tiền thu được. Giá trị trả về kích hoạt bị bỏ qua cho tất cả Các loại kích hoạt khác.

Tip:Danh sách kết quả có thể được tạo từ một mảng Biểu diễn của tuple đã sửa đổi vớimảng getLệnh 사설 토토.

Đây là một ví dụ nhỏ quy trình kích hoạt buộc Giá trị số nguyên trong bảng để theo dõi số lượng cập nhật được thực hiện trên hàng. Đối với các hàng mới được chèn, giá trị được khởi tạo thành 0 và sau đó tăng lên trên mỗi bản cập nhật hoạt động.

Tạo chức năng TrigFunc_ModCount () Trả về Trigger dưới dạng $$
    chuyển đổi $ tg_op 
        CHÈN 
            Đặt mới ($ 1) 0

        CẬP NHẬT 
            Đặt mới ($ 1) $ Old ($ 1)
            tăng mới ($ 1)

        mặc định 
            trả lại ok

    trả lại [mảng nhận mới]
$$ Ngôn ngữ pltcl;

Tạo bảng mytab (số nguyên số, văn bản mô tả, số nguyên modcnt);

Tạo Trigger Trig_MyTab_ModCount trước khi chèn hoặc cập nhật trên MyTab
    Đối với mỗi hàng thực thi quy trình TrigFunc_ModCount ('modcnt');

Lưu ý rằng chính quy trình kích hoạt không biết Tên cột; Đó là cung cấp từ các đối số kích hoạt. Cái này Cho phép quy trình kích hoạt được sử dụng lại với các bảng khác nhau.