Data definitions Guide, sayfa 184 der ki :
Kod: Tümünü seç
BEFORE : data def, sayfa 184 : "New values for a row can only be altered before actions. A trigger that fires after INSERT and tries to assign a value to NEW.column will have no effect. "
AFTER : The actual column values are not altered until after the action, so triggers that reference values from their target tables will not see a newly inserted or updated value unless they fire after UPDATE or INSERT.
örneğin :
Kod: Tümünü seç
CREATE TRIGGER TI_FATURA FOR FATURA
ACTIVE AFTER INSERT POSITION 0
AS
/* ERwin Builtin Wed Sep 08 16:35:45 2004 */
/* INSERT trigger on FATURA */
DECLARE VARIABLE numrows INTEGER;
BEGIN
select count(*) from BAYILER
where NEW.BAYIKODU = BAYILER.BAYIKODU into numrows;
IF (numrows = 0) THEN
BEGIN
EXCEPTION BAYILER_CHILD_INSERT_RESTRICT;
END
/* BAYI_HESABI tablosunda, yazılan faturadaki tutar ve KDV bilgisini bayinin borcuna yaz. */
EXECUTE PROCEDURE SPI_FATURA NEW.BAYIKODU, NEW.TUTAR, NEW.FATKDV, NEW.FATISKONTO;
END
Bu durumda, önce FATURA tablosuna bir kayıt eklenecek, sonra trigger çalışacak, bir de bakacak BAYILER tablosunda kayıtlı olmayan birine fatura kesmeye kalkılıyor, rollback yaparak, FATURA ya yazdığı kayıdı silecek sanırım değil mi ?
O zaman bu triggerın AFTER değil de BEFORE şeklinde olması daha doğru ve daha hızlı olur. Doğru mu düşünüyorum ?