trigger çalıştıramadım

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
Kullanıcı avatarı
Ademkoysuren
Üye
Mesajlar: 83
Kayıt: 26 Ağu 2003 03:07
Konum: KIRŞEHİR
İletişim:

trigger çalıştıramadım

Mesaj gönderen Ademkoysuren »

selam arkadaşlar aşağıdaki kodda bir yanlışlık varmı "DEVAMSIZLIKTAN KALDI" table la eklemiyor. sorun ne olabilir.



CREATE TRIGGER DEVAMSIZLIK_BILGILERI_AIU0 FOR DEVAMSIZLIK_BILGILERI
ACTIVE AFTER INSERT OR UPDATE POSITION 0
AS
DECLARE VARIABLE DEV_UYARI4_BAS float;
DECLARE VARIABLE OZURSUZ_ float;
DECLARE VARIABLE EOYILI_ VARCHAR(10);
begin
SELECT DISTINCT DERS_YILI.ders_yili
FROM DERS_YILI
INTO :EOYILI_;

select pro_devamsizlik_hesaplamasi.ozursuz from pro_devamsizlik_hesaplamasi
WHERE pro_devamsizlik_hesaplamasi.ogrenci_id = NEW.ogrenci_id
INTO :OZURSUZ_;


SELECT sb_ayrinti.sb_ayrinti_kodu from sb_ayrinti
WHERE sb_ayrinti.sb_grub_id = 21
INTO :DEV_UYARI4_BAS;



IF (OZURSUZ_ > DEV_UYARI4_BAS) THEN
BEGIN
update gecmis_yil_ortalamalari
SET gecmis_yil_ortalamalari.sonuc = 'DEVAMSIZLIKTAN KALDI'
WHERE ((gecmis_yil_ortalamalari.ogrenci_id = new.ogrenci_id )
and
(gecmis_yil_ortalamalari.eoyil = :EOYILI_));

END
end
Cemre Bilgisayar Yazılım
KIRŞEHİR
Kullanıcı avatarı
cihan
Üye
Mesajlar: 65
Kayıt: 02 Ağu 2005 03:34

Mesaj gönderen cihan »

sp kullanmayı dene triggere bu kadar yüklenme kontrolü daha kolay
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

IF (OZURSUZ_ > DEV_UYARI4_BAS) THEN
yukardaki kosuldaki degiskenlerden bir tanesi null gelme durumunda
degerlendirilmeyecektir, daha yukarıda degiskenlere atama yaparken null olma durumunu coalesce ile kontrol altına alabilirsin
ÜŞENME,ERTELEME,VAZGEÇME
Kullanıcı avatarı
Ademkoysuren
Üye
Mesajlar: 83
Kayıt: 26 Ağu 2003 03:07
Konum: KIRŞEHİR
İletişim:

Mesaj gönderen Ademkoysuren »

IF (OZURSUZ_ > DEV_UYARI4_BAS) THEN
BEGIN
update gecmis_yil_ortalamalari
SET gecmis_yil_ortalamalari.sonuc = 'DEVAMSIZLIKTAN KALDI'
WHERE ((gecmis_yil_ortalamalari.ogrenci_id = new.ogrenci_id )
and
(gecmis_yil_ortalamalari.eoyil = :EOYILI_));

END


if değerinde içeri giriyor update çalışmıyor (adım adım inceledim ) update üstüne kadar geliyor ama sonuç yok
Cemre Bilgisayar Yazılım
KIRŞEHİR
poshet303
Üye
Mesajlar: 235
Kayıt: 26 Eki 2005 01:15

Mesaj gönderen poshet303 »

gecmis_yil_ortalamalari için de bir (before update için tetiklenen) trigger yazmışsanız sizin update işlemi yapılmadan o trigger çalışıp işleri karıştırıyor olabilir.
Trigger lar ile çalışırken etkileşimlere dikkat etmek lazım. Onun dışında kodunuz bir hata görünmüyor (belki ben göremiyorum). Yalnız kodunuzda istisna yönetimi yok. NULL matematikteki 0 gibi. Değeri yok ama çok hayati. NULL değerleri kontrol etmek gerek. Aman dikkat.
Cevapla