Triger null değer tetikleme

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ı
greenegitim
Üye
Mesajlar: 713
Kayıt: 28 Nis 2011 10:33
Konum: İstanbul

Triger null değer tetikleme

Mesaj gönderen greenegitim »

Merhaba
şöyle bir triger kullanıyorum

Kod: Tümünü seç

if (new.id9<>OLD.id9) then
 begin
        INSERT INTO DROGON_LOG (DRAGON_LOG_ID, MODELID, MODELKODU, ISLENDIMI1, ISLENDIMI2, LOGTARIHI1, GUNCELLEMETARIHI, ISLEMID)
        VALUES (gen_id(gen_drogon_log_id,1), new.id, NEW.modelkodu, 0, 0, current_timestamp, NULL, 4);
 end
 
Burada örnek
id9 değeri null iken 45 yapınca triger tetiklenmiyor.
id9 değeri 45 iken null yapınca triger tetiklenmiyor.

ama id9 değeri 45 iken 150 yapınca triger tetikleniyor ve çalışıyor null<>45 değilmiki anlayamadım
Mücadele güzelleştirir!
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4740
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Triger null değer tetikleme

Mesaj gönderen mrmarman »

Tespitinde haklısın, "is NULL" ile önce test edip ondan sonra fark kontrolü yapmak gerekiyor.
Onun için değerleri NULL ise bir değere eşitletip ondan sonra karşılaştırmak lazım geliyor.

Örnek kullanım aşağıdaki gibi olabilir

Kod: Tümünü seç

if ISNULL(new.id9, 'NULL') <> ISNULL(OLD.id9, 'NULL') then

EK: Firebird başlığını görmemişim. Fonksiyon NULLIF() olacak. 'NULL' string değeri yerine -1 de diyebilirsin dilersen. Uyumlu olsun diye...

Kod: Tümünü seç

if ( NULLIF(new.id9, 'NULL') <> NULLIF(OLD.id9, 'NULL') ) then
Resim
Resim ....Resim
Kullanıcı avatarı
greenegitim
Üye
Mesajlar: 713
Kayıt: 28 Nis 2011 10:33
Konum: İstanbul

Re: Triger null değer tetikleme

Mesaj gönderen greenegitim »

Hocam denedim fakat değişen bir şey olmadı
id9 alanım integer bir alan boş ise default değeri de verdim değişen bir şey olmadı hata firebirdin http://www.firebirdsql.org/refdocs/lang ... ullif.html sayfasındaki inullif i de denedim fakat sonuç aynı
Mücadele güzelleştirir!
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4740
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Triger null değer tetikleme

Mesaj gönderen mrmarman »

Bir de şöyle dener misin..

Kod: Tümünü seç

IF (OLD.id9 IS DISTINCT FROM new.id9) THEN
Resim
Resim ....Resim
Kullanıcı avatarı
greenegitim
Üye
Mesajlar: 713
Kayıt: 28 Nis 2011 10:33
Konum: İstanbul

Re: Triger null değer tetikleme

Mesaj gönderen greenegitim »

Kod: Tümünü seç

IF (OLD.id9 IS DISTINCT FROM new.id9) THEN
Bu şekilde çalıştı hocam çok teşekür ederim NULLIF in çalışmaması firebird ün bir bug ı mıdır anlayamadım.
Mücadele güzelleştirir!
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2247
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Re: Triger null değer tetikleme

Mesaj gönderen Kuri_YJ »

Selamlar,

NULL kontrolleri hep insanları uğraştırmıştır. COALESCE fonksiyonunu kullanarak kontrol ederseniz sorun çıkmaz. Muharrem'in söylediği şekilde de olur. Ama genelde NULL kontrolleri SQL'in genel standartlarında kullanma isterseniz COALESCE ile kontrol edin. ISNULL, NULLIF vs. gibi komutlar genelde kullanılan RDBMS'lerin kendi fonksiyonları olur. COALESCE ise SQL standartlarındandır. Yani COALESCE'yi her RDBMS'te kullanabilirsiniz.

Örnek

Kod: Tümünü seç

	IF (COALESCE(NEW.id9, 0) <> COALESCE(OLD.id9, 0)) THEN
	BEGIN
		.
		.
		.
	END
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Cevapla