| Master43 | 23.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. | |
| rsimsek | 24.07.2005 - 00:13:41 |
| select lerin sonuna select edilen değeri /değerleri atayacağın into ları eklememişsin | |
| Master43 | 24.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 Can | 26.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? | |
| Master43 | 26.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. | |
| miskin | 27.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. | |