Firebird Case'i cift sartlandirma

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
ikra
Üye
Mesajlar: 901
Kayıt: 28 Nis 2005 01:26
Konum: Simdilik Topragin Üstü

Firebird Case'i cift sartlandirma

Mesaj gönderen ikra »

selamu aleyküm...
bir trigger yaziyorum ve after (insert,update) kismina böyle bir kod yazdim.

Kod: Tümünü seç

update mitarbeiter set urlaub = (case when old.von>=date and old.bis<=date then 1 else 0 end) where mitarb_id = old.mitarb_id;
buradaki amac tabloya islem yapildiktan sonra baska bir tabloda degisiklik yapmak. fakat AND kisminda hata veriyor. Case'i cift sartlandiramazmiyim?

simdiden tesekkür ediyorum....
selam ve dua ile...
kıdemsiz üye
t-hex
Kıdemli Üye
Mesajlar: 531
Kayıt: 18 Mar 2005 02:45
Konum: İstanbul/Antalya
İletişim:

Mesaj gönderen t-hex »

Merhaba,

Emin misiniz hatanın bundan kaynakladığından? istediğiniz kadar şart ile bağlayabilmeniz lazım.

Kod: Tümünü seç

select case when 1*1 = 1 and 2*2 =4 and 3*3 = 9 then 1 else 0 end from table1;
böyle yapıp deniyorum bir sorun çıkmıyor :!:
ikra
Üye
Mesajlar: 901
Kayıt: 28 Nis 2005 01:26
Konum: Simdilik Topragin Üstü

Mesaj gönderen ikra »

hocam yok. deniyorum olmuyor. and kisminda hata veriyor hata kodu aynen söyle

Kod: Tümünü seç

Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 6, char 27.
and.
kıdemsiz üye
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Sanırım update içinde OLD u kullanamıyorsunuz :wink:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
ikra
Üye
Mesajlar: 901
Kayıt: 28 Nis 2005 01:26
Konum: Simdilik Topragin Üstü

Mesaj gönderen ikra »

hocam sorun oradan da kaynaklanmiyor... update i kaldirdim yalnizca insert i biraktim sonuc yine ayni...

soruyu söyle toparlayayim...

iki adet tablo var. birincisi master tablo (isciler) ikincisi detail tablo (hasta)... matser tabloda isciye ait olan (hasta) field i kimi zaman degistirmem icab ediyor. bu alan smallinteger olarak tanimli ve 0 veya 1 olarak islenmesi gerekiyor...

örnegin isci telefon etti ve bugünden itibaren istirahatte oldugunu üc gün ise gelemeyecegini bildirdi. ben detail tabloya bilgi girisi yapiyorum.

***********************
isci_id
baslangic
bitis
***********************
bu tabloda bir islem gerceklestiginde master tabloda hasta field i 1 olmali... yalniz bunu yaparken case ile iki sart uyguluyorum.

Kod: Tümünü seç

baslangic >= date and bitis <= date
yukarida belirttigim detail tablonun trigger inde after insert ve after update den sonra su sekilde kullaniyorum...

Kod: Tümünü seç

update isci set hasta= (case when old.baslangic>=date and old.bitis<=date then 1 else 0 end) where isci_id = old.isci_id;
isci istirahate cikmadan bir önceki gün hasta oldugunu bildiremez. ve yine istirahatten döndükten sonra ben hastaydim onun icin gelemedim diyemez. bundan dolayi case'i sartlandirmaliyim...
kıdemsiz üye
Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Mesaj gönderen Hakan Can »

date değişkenini yanlış kullanıyorsunuz.

date FireBird'de reserved word.

Eğer date'ten maksadınız aktif günse CURRENT_DATE kullanınız.

İyi çalışmalar.
Cevapla