Null değerli alanları filtereleme
Master4323.07.2005 - 23:35:02
S.A.

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
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;

yazdığımda Dönem_No için Null değer içeren kayıtlar hep 1 oluyor diğerleri +1 şeklinde normal olarak artıyor.
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

...
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
...

Bi hayli uzun oldu ama umarım sıkmamışımdır. Yorumlarınız için şimdiden teşekkürler.
 
rsimsek24.07.2005 - 00:13:41
select lerin sonuna select edilen değeri /değerleri atayacağın into ları eklememişsin Idea
 
Master4324.07.2005 - 00:40:36
...
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 :92371950e9;
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 :92371950e9;
END
...

Kalın ve kırmızı işaretlediğim INTO :REC_COUNT lardan başka bir into daha mı kullanmam gerek? acaba
 
Hakan Can26.07.2005 - 09:47:21
AND DONEM_NO = NEW.DONEM_NO

yerine:

AND (DONEM_NO = NEW.DONEM_NO OR (DONEM_NO IS NULL AND NEW.DONEM_NO IS NULL))

yazarak dener misiniz?
 
Master4326.07.2005 - 11:43:42
Hakan Can kadeşim eline sağlık gayet güzel çalışıyor ancak neden böyle bir koda ihtiyaç duyuluyor anladım desem yalan olur.

Allah sizin gibileri başımızdan eksik etmesin.
 
miskin27.07.2005 - 00:19:54
Kesin konuyu tam kavramamakla beraber, Triggerini befor insert yapmissin, After insertten sonra normelde degerlerin girmesi lazim degil mi?

Birde select ifadesinin dogrulugunu görmek icin, Soruyu triggerin disinda vermeni tavsiye ederim, istedigin sonuc cikip cikmadigini görmek icin.

miskin

S.A.

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
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;

yazdığımda Dönem_No için Null değer içeren kayıtlar hep 1 oluyor diğerleri +1 şeklinde normal olarak artıyor.
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

...
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
...

Bi hayli uzun oldu ama umarım sıkmamışımdır. Yorumlarınız için şimdiden teşekkürler.
 
NOT : Bu sayfa google'un siteyi indekslemesi içindir. www.delphiturkiye.com/forum/ adresini kullanınız!
1998-2006 www.delphiturkiye.com