Sp de Tırnak Karakteri

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ı
mikser
Üye
Mesajlar: 120
Kayıt: 30 Haz 2003 09:54
Konum: Ankara

Sp de Tırnak Karakteri

Mesaj gönderen mikser »

IBexpert
FB 1.5

Kod: Tümünü seç

...
DECLARE VARIABLE Sql VARCHAR(200);
...
 sql = 'SELECT ALAN1, ALAN2 FROM TABLO WHERE ALAN1 = ' 
         || NEW.KOD1 ||  ' AND ALAN2 = ' || :TEMPAD ;
yukarıdaki kod da :TEMPAD varchar tipinde ve
tırnak içine nasıl alinabilir.

Kod: Tümünü seç

sql = SELECT ALAN1, ALAN2 FROM TABLO WHERE ALAN1 = 2 AND ALAN2 = 'MERKEZ'
şeklinde olması için tırnak nasıl eklenmeli.
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

Kod: Tümünü seç

TEMPAD='''||TEMPAD||'''
sql = 'SELECT ALAN1, ALAN2 FROM TABLO WHERE ALAN1 = '
         || NEW.KOD1 ||  ' AND ALAN2 = ' || :TEMPAD ;
seklinde dene

Not: sql stringinin boyutunu mumkun mertebe buyutmekte bir sakınca yok mesela 2000 yapabilirsin, 200 olunca ileride bir degisiklik, ekleme falan yaparsan 200 karakteri asınca hata verir,
ÜŞENME,ERTELEME,VAZGEÇME
Kullanıcı avatarı
mikser
Üye
Mesajlar: 120
Kayıt: 30 Haz 2003 09:54
Konum: Ankara

Mesaj gönderen mikser »

üstad aşağıdaki kod sanırım direk atama yapiyor.

TEMPAD='''||TEMPAD||''' olunca TEMPAD ''TEMPAD' ' oluyor.

TEMPAD diyelim ki MERKEZ olsun.

TEMPAD = ''' || TEMPAD || ''' deyince TEMPAD ın 'MERKEZ' olması lazim.
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

TEMPAD=''''||TEMPAD||''''
olacak ewt, bunu direkt sql cumlende de yazabilirsin tabiki
okunaklı olsun diyorsan boyle yap
ÜŞENME,ERTELEME,VAZGEÇME
Kullanıcı avatarı
mikser
Üye
Mesajlar: 120
Kayıt: 30 Haz 2003 09:54
Konum: Ankara

Mesaj gönderen mikser »

evet ustad;

TEMPAD = ''' ' || TEMPAD || ' ''';

şeklinde olması lazımmış. Bu tamam. SQl i yazdık. ve şu sekilde calistirdik.

EXECUTE STATEMENT sql INTO :TKOD1;

burada diyelim ki SQL şu sekilde olsun
select ALAN3 from TABLE where ALAN1 = 2 and ALAN2 = 'MERKEZ'

bunu derleyici tarafından calistiriyorum ve 1 kayıt geliyor. yani kayıt var.
oysa
EXECUTE STATEMENT sql INTO :TKOD1;

calistiginda TKOD1 değişkenine ALAN3 in degerini yazması gerekmez mi?

tabloyu şu sekilde dusunelim.

ALAN1 ALAN2 ALAN3
...
2 MERKEZ 3
...
derleyici tarafında sql sonucu 3 geliyor
bu durumda TKOD1 in 3 olması gerekmiyor mu?
ya da bu 3 ü nasıl bir degiskene atayabilirim.

tesekkurler.
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

TKOD1 cıkıs degiskeni degilmi
simdi sorgu sonucu bir kayıt kumesi donecek onun icin for execute statement seklinde kullanmak gerek
yani

Kod: Tümünü seç

for execute statement sql into :TKOD1 
  suspend;
not: alan sayıları ve cıkıs sayıları aynı olmalı
birde kendi tecrubelerimden tipler uyusmadıgında hata veriyor ,
sum kullanıldıgında sonuc bigint oluyor ve bunu integer degere donusturmek gerekiyor, yoksa hata veriyor
ÜŞENME,ERTELEME,VAZGEÇME
Kullanıcı avatarı
mikser
Üye
Mesajlar: 120
Kayıt: 30 Haz 2003 09:54
Konum: Ankara

Mesaj gönderen mikser »

üstad belki başta belirtmeliydim
bu bir SP değil TRIGGER.


for execute statement sql into :TKOD1 satırına hata verdi.

dosyadaki ALAN3 INTEGER tipinde TKOD1 de integer tipinde.

sonucda sql bir kayıt döndürecek. ve sadece bir alanı sececek. gelen degeri bir degiskene alacak. gelen deger 3 de olabilir 5 de 10 da.
fakat null geliyor.
Kullanıcı avatarı
mikser
Üye
Mesajlar: 120
Kayıt: 30 Haz 2003 09:54
Konum: Ankara

Mesaj gönderen mikser »

üstad sagolasın. sorun cözüldü.

EXECUTE STATEMENT sql INTO TKOD1;

satırı calisti.

tesekkurler.
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

yapmak istedigin tam olarak nedir, belki daha prtik bir cozum olabilir
mesela where kısmında parametre kullanarak hic execute statement a gerek kalmadan kolayca istedigin yapılabilir

Kod: Tümünü seç

declare variable tkod1 integer;
declare variable tempad varchar(100);
begin
  tempad='MERKEZ' -- yada ne atayacaksan o
  tempad=''''||tempad||''''
  select alan3 from tablo
    where alan1 = new.KOD1 and alan2 = :TEMPAD into :tkod1;
end
birde bu sekilde dene
ÜŞENME,ERTELEME,VAZGEÇME
Kullanıcı avatarı
mikser
Üye
Mesajlar: 120
Kayıt: 30 Haz 2003 09:54
Konum: Ankara

Mesaj gönderen mikser »

üstad sorun halloldu... yardımlariniz icin tesekkurler.
tırnak olayi sorunu cözdü.
Cevapla