trigger' da old.column degeri null ise trigger calismiyor.

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
bukentay
Üye
Mesajlar: 44
Kayıt: 16 Şub 2004 07:21

trigger' da old.column degeri null ise trigger calismiyor.

Mesaj gönderen bukentay »

stok isimli bir tablomuz var.
bu tablo icin

Kod: Tümünü seç

CREATE TRIGGER UPDATE_RESIM FOR STOK
ACTIVE AFTER  UPDATE POSITION 0
AS

begin
IF (OLD.URUN_RESMI<>NEW.URUN_RESMI) THEN
BEGIN
     UPDATE STOK SET URUN_RESMI=NEW.URUN_RESMI WHERE  MARKA=NEW.MARKA AND MODEL=NEW.MODEL AND URUN_KODU=NEW.URUN_KODU;
END

end
seklinde bir triggerimiz var.
URUN_RESMI 255 karakter uzunlugunda varchar tipinde nullable bir alan

tabloda urun_resmi alanının degeri degisince aynı marka,model ve urunkodlu malzemelerinde urun_resmi degissin istiyorum.
ustte yazidgim trigger eger alanın onceki ya da sonraki degeri null degilse calisiyor.
yani:

Kod: Tümünü seç

UPDATE STOK SET URUN_RESMI='deneme' WHERE  PARCA_KODU='AR109'
Eger AR109 kodlu parca icin daha once bir resim eklenmemisse (URUN_RESMI null ise) trigger calismiyor ve sadece AR109 kodlu urunun resmi degisiyor.ama onceden girilmis bir urun_resmi degerini degistirdigim zaman trigger calisiyor.
anladigim kadariyla old.column veya new.column degeri null ise

Kod: Tümünü seç

IF (OLD.URUN_RESMI<>NEW.URUN_RESMI) THEN 
kosulu calismiyor.acaba burada bir tip donusumumu yapmak lazim?

Yardimci olacaklara simdiden tesekkurler..
bukentay
Üye
Mesajlar: 44
Kayıt: 16 Şub 2004 07:21

Mesaj gönderen bukentay »

o kadar aradık taradık bulamadık.halbuki elimiz altında "Firebird-Null-Guide" duruyormus , icinde de "NULL in if statements" die bi konu varmıs. hatta o konuda da "Finding out if fields are the same" die bi baslik varmis.

if kullanımında eger kosulun bir tafı null ise firebir then kismini atlayip else kismini calistiriyormus.

Kod: Tümünü seç

IF (OLD.URUN_RESMI = NEW.URUN_RESMI or OLD.URUN_RESMI is null and NEW.URUN_RESMI is null) THEN
BEGIN

END
ELSE
BEGIN
     UPDATE STOK SET URUN_RESMI=NEW.URUN_RESMI WHERE MARKA=NEW.MARKA AND MODEL=NEW.MODEL AND URUN_KODU=NEW.URUN_KODU;
END
kodu ustteki sekilde duzeltince sorun cozuldu.
Cevapla