triger veya sp'lerde isnull fonksiyonu

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ı
tsamim
Üye
Mesajlar: 76
Kayıt: 19 Ağu 2004 03:08
Konum: izmir

triger veya sp'lerde isnull fonksiyonu

Mesaj gönderen tsamim »

merhaba arkadaşlar ;

forumda aramalarım sonunda bir yerde isnull fonksiyonu ile karşılaştım select cümlesinde gelen deger eğer null gelirse istediğimiz bir değer atayabilmemizi sağlayan bir fonksiyon olarak kullanılıyor.

Ancak ben isnull fonksiyonunu tanımlayıp kullanamadım. :(

delphi tarafında değil veritabanı tarafında sp ve trigerlarda kullanmak istiyorum.

veritabanım firebird 1.5

ilgileriniz için şimdiden teşekkürler, iyi çalışmalar dilerim.
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

s.a.
1. is null bitişik değil ayrı yazılıyor.
2. şöyle bir örnekle açıklamaya çalışıyım.

Kod: Tümünü seç

CREATE TRIGGER XXXXXXXX_BI FOR XXXXXXXX
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
  IF ((NEW.ID IS NULL) OR
     (NEW.ID =0)) THEN
    NEW.ID = GEN_ID(GEN_XXXXXXXX_ID,1);
  if (new.ihaleid is null) then new.ihaleid=0;
  if (new.siparisid is null) then new.siparisid=0;
  if (new.kesildigiyer is null) then new.kesildigiyer=1;
END
gördüğün gibi eğer gelen değer null ise varsayilan bir değer atıyor.
aynı karşılaştırmaları stored procedurelerdede yapabilirsin.
select içereisinde case kullanarakda yapabilirsin ama o biraz daha karışık gibi
neyse fazla kafanı karışıtırmayım
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

@aslangeri sanırım bahsedilen..

Kod: Tümünü seç

select * from table where degisken is null
veya

Kod: Tümünü seç

select * from table where degisken is not null
daki is null değil.

Fonksiyon olarak ISNULL(alan, dönecek_değer) genel formatındaki isnull. Burada alan ın değeri null olursa başka bir değer döndürülebilir.. Daha önce konuşuldu ISNULL() fonksiyonu MS-SQL ve SYBASE de kullanılmaktadır. Fakat FireBird de bu işi;

Kod: Tümünü seç

select urun_no, ad, miktar * COALESCE(satis_fiyati, 0) from urun

Kod: Tümünü seç

select urun_no, ad, COALESCE(satis_fiyati, 'sıfır') from urun
örneklerindeki COALESCE(alan_değişken, dönecek_değer) ile yapabiliriz..

Ayrıca;

Kod: Tümünü seç

 select urun_no, ad, case when satis_fiyati is null then 'sıfır' else satis_fiyati end from urun
veya

Kod: Tümünü seç

 select urun_no, ad, case when satis_fiyati is null then 0 else satis_fiyati end from urun
yapısını kullanarak FireBird de değişik varyasyonlar yapmak mümkündür :idea:

Ayrıca aşağıdaki yapıda bir de NULLIF() fonksiyonu var;
c) NULLIF

Returns NULL for a sub-expression if it has a specific value, otherwise returns the value of the sub-expression.

Format
<case abbreviation> ::=

NULLIF <left paren> <value expression> <comma> <value expression> <right paren>

Syntax Rules
NULLIF (V1, V2) is equivalent to the following <case specification>:

CASE WHEN V1 = V2 THEN NULL ELSE V1 END

Example

UPDATE PRODUCTS
SET STOCK = NULLIF(STOCK,0)
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Kullanıcı avatarı
tsamim
Üye
Mesajlar: 76
Kayıt: 19 Ağu 2004 03:08
Konum: izmir

Mesaj gönderen tsamim »

ilgileriniz için çok teşekkürler;

Sayın rşimşek hocam Ayrıntılı cevabınız için çok teşekkür ederim.Gerçekten çok açıklayıcı ve bilgilendirici bir cevap yazmışssınız soruma ayırdığınız zaman içinde ayrıeten teşekkür ederim.Çalışmalarınızda başarılar dilerim
Cevapla