Có nhiều ví dụ phức tạp hơn trongsrc/test/repress/repress.cvà inPREDT/SPI.
Đây là một ví dụ rất đơn giản về việc sử dụng kích hoạt. Chức năng Trigf báo cáo số lượng các bộ dữ kèo bóng đá pháp trong mối quan hệ được kích hoạt và Bỏ qua thao tác nếu truy vấn cố gắng chèn null vào x (tức là - nó hoạt động như một ràng buộc không có null nhưng không phá thai giao dịch).
#include "Lệnh/Trigger.h"/ * - " - và kích hoạt *// Trigf trigf (void); Nặng trĩu Trigf () Tuppledesc Tupdesc; Nặng nề Rettuple; char *khi nào; Bool Checknull = Sai; Bool isnull; int ret, i; if (! currentTriggerData) ELOG (WARN, "Trigf: Triggers không được khởi tạo"); / * tuple để trở lại thực thi */ if (trigger_fired_by_update (currentTriggerData- tg_event))) rettuple = currentTriggerData- tg_newtuple; khác rettuple = currentTriggerData- tg_trigtuple; /* Kiểm tra nulls? */ if (! Trigger_fired_by_delete (currentTriggerData- tg_event) && Trigger_fired_befor (currentTriggerData- tg_event)) CheckNull = true; if (trigger_fired_befor (currentTriggerData- tg_event))) Khi = "trước"; khác Khi = "sau"; TUPDESC = currentTriggerData- tg_relation- rd_att; CurrentTriggerData = null; / * Kết nối với Trình quản lý SPI */ if ((ret = spi_connect ()) <0) ELOG (WARN, "Trigf (bị sa thải %s): spi_connect trả về %d", khi, ret); / * Nhận số lượng bộ dữ kèo bóng đá pháp liên quan */ ret = spi_exec ("chọn đếm (*) từ ttest", 0); if (ret <0) ELOG (WARN, "Trigf (bị sa thải %s): spi_exec trả về %d", khi, ret); i = spi_getbinval (spi_tuptable- vals [0], spi_tuptable- tupdesc, 1, & isnull); ELOG (Thông báo, "Trigf (bị sa thải %s): Có %d Tuples trong ttest", khi, i); Spi_finish (); Nếu (Checknull) i = spi_getbinval (rettuple, tupdesc, 1, & isnull); Nếu (isnull) rettuple = null; Trả lại (Rettuple);
Bây giờ, biên dịch và tạo bảng ttest (x int4):
Tạo hàm kèo bóng đá pháp () trả về mờ đục AS '... path_to_so' ngôn ngữ 'c';
Vac = Tạo kích hoạt trước khi chèn hoặc cập nhật hoặc xóa trên ttest cho mỗi hàng thực thi quy trình Trigf (); TẠO NÊN Vac = Tạo Trigger Tafter sau khi chèn hoặc cập nhật hoặc xóa trên ttest cho mỗi hàng thực thi quy trình Trigf (); TẠO NÊN Vac = chèn vào các giá trị ttest (null); THÔNG BÁO: Trigf (bị sa thải trước): Có 0 bộ dữ kèo bóng đá pháp trong ttest Chèn 0 0 - Chèn bị bỏ qua và sau khi kích hoạt không được bắn Vac = Chọn * từ ttest; x - (0 hàng) Vac = chèn vào các giá trị ttest (1); THÔNG BÁO: Trigf (bị sa thải trước): Có 0 bộ dữ kèo bóng đá pháp trong ttest Lưu ý: Trigf (bị sa thải sau): Có 1 bộ dữ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Hãy nhớ những gì chúng tôi đã nói về tầm nhìn. Chèn 167793 1 Vac = Chọn * từ ttest; x - 1 (1 hàng) Vac = Chèn vào ttest Chọn x * 2 từ ttest; THÔNG BÁO: Trigf (bị sa thải trước): Có 1 bộ dữ THÔNG BÁO: Trigf (bị sa thải sau): Có 2 bộ dữ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Hãy nhớ những gì chúng tôi đã nói về tầm nhìn. Chèn 167794 1 Vac = Chọn * từ ttest; x - 1 2 (2 hàng) Vac = Cập nhật tập hợp ttest x = null trong đó x = 2; Lưu ý: Trigf (bị sa thải trước): Có 2 bộ dữ Cập nhật 0 Vac = Cập nhật bộ ttest x = 4 trong đó x = 2; Lưu ý: Trigf (bị sa thải trước): Có 2 bộ dữ THÔNG BÁO: Trigf (bị sa thải sau): Có 2 bộ dữ Cập nhật 1 Vac = Chọn * từ ttest; x - 1 4 (2 hàng) Vac = Xóa khỏi ttest; Lưu ý: Trigf (bị sa thải trước): Có 2 bộ dữ Lưu ý: Trigf (bị sa thải sau): Có 1 bộ dữ THÔNG BÁO: Trigf (bị sa thải trước): Có 1 bộ dữ THÔNG BÁO: Trigf (bị sa thải sau): Có 0 bộ dữ kèo bóng đá pháp trong ttest ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Hãy nhớ những gì chúng tôi đã nói về tầm nhìn. Xóa 2 Vac = Chọn * từ ttest; x - (0 hàng)