LO$CREATED_TABLES tablosunda
FIELD_POSITION,
FIRMA_NO,
DONEM_NO ....
gibi alanlarım var ben yeni kayıt eklediğimde yeni girdiğim kaydın FIRMA_NO ve DONEM_NO ile uyuşan daha önce eklenmiş kayıtlar varsa FIELD_POSITION alanına önceki uyan kaydın bir fazlasını yazacak.
Örneklemek gerekirse benim önceden
Firma_No: 5
Dönem_No: 7
FIELD_POSITION:10
değerlerini içeren bir kaydım var olsun yeni ekleyeceğim kaydında değerleri
Firma_No:5 ve Dönem_No:7
olduğunda otomatik olarak FIELD_POSITION = 11 yazacak bir trigger yazmak istiyorum
bunda ne var diyeceksiniz ancak Dönem_No için Null değer içeren kayıtlarda var ve SQL ifadesi olarak
Kod: Tümünü seç
CREATE TRIGGER "TGBI$CREATED_TABLES"
FOR LO$CREATED_TABLES
ACTIVE BEFORE INSERT POSITION 0
AS
DECLARE VARIABLE REC_COUNT INTEGER;
BEGIN
NEW.ID = GEN_ID(GEN$CREATED_TABLES, 1);
SELECT COUNT(ID) FROM LO$CREATED_TABLES
WHERE TABLE_NAME = NEW.TABLE_NAME
AND FIRMA_NO = NEW.FIRMA_NO
AND DONEM_NO = NEW.DONEM_NO
INTO :REC_COUNT;
NEW.FIELD_POSITION = :REC_COUNT + 1;
END;
Sanırım yeni kayıtta Dönem_No alanına bir değer vermediğim halde New.Dönem_No değeri null olarak algılanmıyor heralde.
Bende tezimi sınamak için bu triggerı IF' li yazdım ama değişen bişi yok yine aynı IS NULL kısmı çalışmıyor yani NEW.DONEM_NO hep IS NOT NULL gibi
Kod: Tümünü seç
...
IF (NEW.DONEM_NO IS NULL) THEN
BEGIN
SELECT COUNT(ID) FROM LO$CREATED_TABLES
WHERE TABLE_NAME = NEW.TABLE_NAME
AND FIRMA_NO = NEW.FIRMA_NO
AND DONEM_NO IS NULL INTO :REC_COUNT;
END
ELSE
BEGIN
SELECT COUNT(ID) FROM LO$CREATED_TABLES
WHERE TABLE_NAME = NEW.TABLE_NAME
AND FIRMA_NO = NEW.FIRMA_NO
AND DONEM_NO = NEW.DONEM_NO INTO :REC_COUNT;
END
...