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,
ş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.
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
ü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.
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
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