before update trigger ı hakkında.

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
meron06
Üye
Mesajlar: 393
Kayıt: 15 Eki 2005 04:23

before update trigger ı hakkında.

Mesaj gönderen meron06 »

iy içalışmalar arkadaşlar.bi tablom var ve bu tblomun before update inde bi triggerim var.tirggerımın kodu şu şekilde.

if (new.sonuc<>'')then execute procedure otoonay new.kod,new.mkod;

bu trigger sonuc tablosundaki sonuc alanına bi değer update edilince çalışıyor.ve başka bi tabloda bi alanı güncelliyor.yalnız burda şöyle bi sıkıntı
var.örn.tablodaki 100.kayıdın sonucu güncellendi güncellenince trigger procedure yi tetikledi ve b tablosundaki ilgili alanı güncelledi.yine aynı 100.satırdaki isim alanı güncellendiğindede yine bu trigger tetikleniyor ve gereksiz bi güncelleme çalışmış oluyor.yapmak istediğim şu sadece sonuç alanı güncellendiğinde bu procedure yi tetiklese .bunu nasıl yapabilirim.
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7603
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

Merhaba,

Ufak bir karşılaştırma yapıp, sadece değer değiştiyse çalıştırabilirsin.

if (old.sonuc <> new.sonuc) then
execute...

Ek not: Eğer alan null olabiliyorsa coalesce kullanabilirsin.

if (coalesce(old.sonuc,'') <> coalesce(new.sonuc,'')) then
execute...

Kolay gelsin.
meron06
Üye
Mesajlar: 393
Kayıt: 15 Eki 2005 04:23

Mesaj gönderen meron06 »

mustafa bey old.sonuc<>new.sonuc olayını denemiştim problem yaşamıştım.update etmesi gereken alanları update etmemişti.mecburen eski haline getirmiştim.bu coalesce olayını biraz açıklayabilirmiisniz.
akdatilla
Üye
Mesajlar: 292
Kayıt: 02 Nis 2006 06:04
Konum: Antalya

Mesaj gönderen akdatilla »

s.a.
Burada benim daha önce başıma gelen türden bir mesele var sanırım.
Aşağıdaki linki incelersen belki faydalı olabilir.
kolay gelsin.

viewtopic.php?t=21009
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7603
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

meron06 yazdı:mustafa bey old.sonuc<>new.sonuc olayını denemiştim problem yaşamıştım.update etmesi gereken alanları update etmemişti.mecburen eski haline getirmiştim.bu coalesce olayını biraz açıklayabilirmiisniz.
Merhaba,

Karşılaştırma ile herhangi bir sıkıntı çıkmaz, ben pek çok yerde kullanıyorum. Eğer sıkıntı çıkıyorsa null karşılaştırması gibi bir durumdan sıkıntı çıkıyordur.

Bir değerle null bir değeri karşılaştırırsanız, sonuç sizin istediğiniz gibi olmayabilir. Mesela AD diye varchar bir alan boşken 'Mustafa' değerini atadın, şöyle bir karşılaştırma sana istediğin sonucu vermez :

if (old.AD <> new.AD) then...

Bu tarz durumlarda ya her türlü şartı kontrol edeceksin, ya da coalesce ile null ifadeyi, istediğin tipte bir veriye çevireceksin. Colaesce verilen ifadeler içinde null olmayan ilk değeri döner. Mesela

coalesce(old.AD, '')

dersen, old.AD null ise sana boş string ('') döner. Dolayısıyla kolaylıkla karşılaştırma yapabilirsin. Eğer sayısal bir tipse

coalesce (old.Ad, 0)

gibi de kullanabilirsin.

Kolay gelsin.
meron06
Üye
Mesajlar: 393
Kayıt: 15 Eki 2005 04:23

Mesaj gönderen meron06 »

mustafa bey çok teşekkür ederim tam olarak işimi görecek gibi.
Cevapla