Có nhiều ví dụ phức tạp hơn trong SRC/Test/Refor và trong đóng góp/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ữ tỷ lệ kèo bóng đá 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ữ tỷ lệ kèo bóng đá 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 chức năng tỷ lệ kèo bóng đá () trả về mờ đục dưới dạng '... 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ữ tỷ lệ kèo bóng đá 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ữ tỷ lệ kèo bóng đá 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ữ tỷ lệ kèo bóng đá 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)