kısa kod-sp oluşturamama

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
andronoid
Üye
Mesajlar: 35
Kayıt: 26 Tem 2004 06:44

kısa kod-sp oluşturamama

Mesaj gönderen andronoid »

slm.stok ve stokhar diye iki tablom var. yapıları kısaca;(VT:FireBird 1.5)

Kod: Tümünü seç

Stok                     
    kod-int                   
    ad-varchar                

 StokHar                               
    islemno-bigint                                  
    kod-int                            
    tarih-date
    gmik-int 
    cmik-int

aşağıdaki kod ile stokhar tablosundan ürünlerin aylık giriş ve çıkış toplamlarını hesaplatmaya çalışıyorum.


Kod: Tümünü seç

SET TERM ^ ;

CREATE PROCEDURE SP_STOKHARAYLIK (
    STKD1 INTEGER,
    STKD2 INTEGER)
AS
begin
 
select yk.kod,yk.ad,
(select sum(gmik) from stokhar yk1 where yk.kod=yk1.kod and extract(month from tarih)=1) "OcakGir",
(select sum(cmik) from stokhar yk1 where yk.kod=yk1.kod and extract(month from tarih)=1) "OcakCik",
(select sum(gmik) from stokhar yk1 where yk.kod=yk1.kod and extract(month from tarih)=2) "SubatGir",
(select sum(cmik) from stokhar yk1 where yk.kod=yk1.kod and extract(month from tarih)=2) "SubatCik",
(select sum(gmik) from stokhar yk1 where yk.kod=yk1.kod and extract(month from tarih)=3) "MartGir",
(select sum(cmik) from stokhar yk1 where yk.kod=yk1.kod and extract(month from tarih)=3) "MartCik",
(select sum(gmik) from stokhar yk1 where yk.kod=yk1.kod and extract(month from tarih)=4) "NisanGir",
(select sum(cmik) from stokhar yk1 where yk.kod=yk1.kod and extract(month from tarih)=4) "NisanCik",
(select sum(gmik) from stokhar yk1 where yk.kod=yk1.kod and extract(month from tarih)=5) "MayısGir",
(select sum(cmik) from stokhar yk1 where yk.kod=yk1.kod and extract(month from tarih)=5) "MayısCik",
(select sum(gmik) from stokhar yk1 where yk.kod=yk1.kod and extract(month from tarih)=6) "HaziranGir",
(select sum(cmik) from stokhar yk1 where yk.kod=yk1.kod and extract(month from tarih)=6) "HaziranCik",
(select sum(gmik) from stokhar yk1 where yk.kod=yk1.kod and extract(month from tarih)=7) "TemmuzGir",
(select sum(cmik) from stokhar yk1 where yk.kod=yk1.kod and extract(month from tarih)=7) "TemmuzCik",
(select sum(gmik) from stokhar yk1 where yk.kod=yk1.kod and extract(month from tarih)=8) "AgustosGir",
(select sum(cmik) from stokhar yk1 where yk.kod=yk1.kod and extract(month from tarih)=8) "AgustosCik",
(select sum(gmik) from stokhar yk1 where yk.kod=yk1.kod and extract(month from tarih)=9) "EylulGir",
(select sum(cmik) from stokhar yk1 where yk.kod=yk1.kod and extract(month from tarih)=9) "EylulCik",
(select sum(gmik) from stokhar yk1 where yk.kod=yk1.kod and extract(month from tarih)=10) "EkimGir",
(select sum(cmik) from stokhar yk1 where yk.kod=yk1.kod and extract(month from tarih)=10) "EkimCik",
(select sum(gmik) from stokhar yk1 where yk.kod=yk1.kod and extract(month from tarih)=11) "KasimGir",
(select sum(cmik) from stokhar yk1 where yk.kod=yk1.kod and extract(month from tarih)=11) "KasimCik",
(select sum(gmik) from stokhar yk1 where yk.kod=yk1.kod and extract(month from tarih)=12) "AralıkGir",
(select sum(cmik) from stokhar yk1 where yk.kod=yk1.kod and extract(month from tarih)=12) "AralıkCik"
from stok yk  where (yk.kod between :stkd1 and :stkd2)
 group by kod,ad order by kod,ad

  suspend;
end
^

SET TERM ; ^
[/size]
iki sorum olacak;

1-yukarıdaki kod sql editörde çalışıyor fakat bunu SP yapayım dedim olmadı. procedure` ü compile edince "suspend" ifadesini tanımıyor. "order by kod,ad" dan sonra ";" koydum. bu sefer ";" ü tanımadı. bunun için ne yapabilirim. Bir çok şey denedim ama başaramadım.

2-yukarıdaki kodu kısaltmanın bir yolu var mı? left outer join ile yapmayı denedim fakat çok acayip sonuçlar verdi.

Kolay gelsin. iyi çalışmalar..
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

eger bir dataset dondurecek isen (hangi alanlar oldugunu output degiskenlerinde belirtmen lazım) for select ile her kayıt dongusunun sonuna suspend koyarak yapmalısın.

sunu bi incele

ornegin:

Kod: Tümünü seç

CREATE PROCEDURE TABLODAN_DATA_CEKME
RETURNS (
    ADI1 VARCHAR(20),
    ADI2 VARCHAR(20)
AS
BEGIN
  FOR
    SELECT ADI1,ADI2 FROM TABLO
    INTO :ADI1,  :ADI2 
  DO
  BEGIN
    SUSPEND;
  END
END
ÜŞENME,ERTELEME,VAZGEÇME
andronoid
Üye
Mesajlar: 35
Kayıt: 26 Tem 2004 06:44

Mesaj gönderen andronoid »

teşekkür ederim hocam. dediğiniz gibi çıkışları output parametre olarak tanımladım ve kodları for do içine aldım. şu anda çalışıyor.

Kod: Tümünü seç

SET TERM ^ ;

CREATE PROCEDURE SP_STOKHARAYLIK (
    STKD1 INTEGER,
    STKD2 INTEGER)
RETURNS (
    KOD INTEGER,
    AD VARCHAR(50),
    OCAKGIR INTEGER,
    OCAKCIK INTEGER,
    SUBATGIR INTEGER,
    SUBATCIK INTEGER,
    MARTGIR INTEGER,
    MARTCIK INTEGER,
    NISANGIR INTEGER,
    NISANCIK INTEGER,
    MAYISGIR INTEGER,
    MAYISCIK INTEGER,
    HAZIRANGIR INTEGER,
    HAZIRANCIK INTEGER,
    TEMMUZGIR INTEGER,
    TEMMUZCIK INTEGER,
    AGUSTOSGIR INTEGER,
    AGUSTOSCIK INTEGER,
    EYLULGIR INTEGER,
    EYLULCIK INTEGER,
    EKIMGIR INTEGER,
    EKIMCIK INTEGER,
    KASIMGIR INTEGER,
    KASIMCIK INTEGER,
    ARALIKGIR INTEGER,
    ARALIKCIK INTEGER)
AS
begin
for
 select yk.kod,yk.ad,
(select sum(gmik) from stokhar yk1 where yk.kod=yk1.kod and extract(month from tarih)=1) ,
(select sum(cmik) from stokhar yk1 where yk.kod=yk1.kod and extract(month from tarih)=1) ,
(select sum(gmik) from stokhar yk1 where yk.kod=yk1.kod and extract(month from tarih)=2) ,
(select sum(cmik) from stokhar yk1 where yk.kod=yk1.kod and extract(month from tarih)=2) ,
(select sum(gmik) from stokhar yk1 where yk.kod=yk1.kod and extract(month from tarih)=3) ,
(select sum(cmik) from stokhar yk1 where yk.kod=yk1.kod and extract(month from tarih)=3) ,
(select sum(gmik) from stokhar yk1 where yk.kod=yk1.kod and extract(month from tarih)=4) ,
(select sum(cmik) from stokhar yk1 where yk.kod=yk1.kod and extract(month from tarih)=4) ,
(select sum(gmik) from stokhar yk1 where yk.kod=yk1.kod and extract(month from tarih)=5) ,
(select sum(cmik) from stokhar yk1 where yk.kod=yk1.kod and extract(month from tarih)=5) ,
(select sum(gmik) from stokhar yk1 where yk.kod=yk1.kod and extract(month from tarih)=6) ,
(select sum(cmik) from stokhar yk1 where yk.kod=yk1.kod and extract(month from tarih)=6) ,
(select sum(gmik) from stokhar yk1 where yk.kod=yk1.kod and extract(month from tarih)=7) ,
(select sum(cmik) from stokhar yk1 where yk.kod=yk1.kod and extract(month from tarih)=7) ,
(select sum(gmik) from stokhar yk1 where yk.kod=yk1.kod and extract(month from tarih)=8) ,
(select sum(cmik) from stokhar yk1 where yk.kod=yk1.kod and extract(month from tarih)=8) ,
(select sum(gmik) from stokhar yk1 where yk.kod=yk1.kod and extract(month from tarih)=9) ,
(select sum(cmik) from stokhar yk1 where yk.kod=yk1.kod and extract(month from tarih)=9) ,
(select sum(gmik) from stokhar yk1 where yk.kod=yk1.kod and extract(month from tarih)=10),
(select sum(cmik) from stokhar yk1 where yk.kod=yk1.kod and extract(month from tarih)=10),
(select sum(gmik) from stokhar yk1 where yk.kod=yk1.kod and extract(month from tarih)=11),
(select sum(cmik) from stokhar yk1 where yk.kod=yk1.kod and extract(month from tarih)=11),
(select sum(gmik) from stokhar yk1 where yk.kod=yk1.kod and extract(month from tarih)=12),
(select sum(cmik) from stokhar yk1 where yk.kod=yk1.kod and extract(month from tarih)=12)
from stok yk  where (yk.kod between :stkd1 and :stkd2)
group by kod,ad order by kod,ad
    into :kod,:ad,:OCAKGIR,:OCAKCIK,:SUBATGIR,:SUBATCIK,:MARTGIR,:MARTCIK,:NISANGIR,:NISANCIK,
          :MAYISGIR,:MAYISCIK,:HAZIRANGIR,:HAZIRANCIK,:TEMMUZGIR,:TEMMUZCIK,:AGUSTOSGIR,:AGUSTOSCIK,
          :EYLULGIR,:EYLULCIK,:EKIMGIR,:EKIMCIK,:KASIMGIR,:KASIMCIK,:ARALIKGIR,:ARALIKCIK
do begin
  suspend;
  end
end
^

SET TERM ; ^

GRANT SELECT ON STOKHAR TO PROCEDURE SP_STOKHARAYLIK;

GRANT SELECT ON STOK TO PROCEDURE SP_STOKHARAYLIK;

İyi çalışmalar. Kolay gelsin.
Cevapla