Delphi Can
FB Sp içinde Select - Baskı Önizleme

+- Delphi Can (http://www.delphican.com)
+-- Forum: Veri Tabanı (http://www.delphican.com/forumdisplay.php?fid=4)
+--- Forum: FireBird (http://www.delphican.com/forumdisplay.php?fid=13)
+--- Konu Başlığı: FB Sp içinde Select (/showthread.php?tid=3184)

Sayfalar: 1 2 3


FB Sp içinde Select - mcuyan - 21-01-2019

Merhaba Arkadaşlar.

Bir Select sonucunu (6 farklı Select + UnionAll) bir View'den alıyorum. View'e tarih kriteri verdiğim halde yine de Data çoğaldıkca view'in return süresi artıyor. 

Bunu SP'ye parametre vererek yapabilir miyiz?.. Yani SP içinde Select kullanabilir miyiz?


FB Sp içinde Select - klavye - 21-01-2019

Sorunuzu yanlis anlamadiysam Sp leri de table gibi kullanabilirsiniz. Yani select * from SP_adi gibi. Sp ye parametrede gonderebilirsiniz select * from Sp_tabloadi(parametre1,parametre2) seklinde.


FB Sp içinde Select - mcuyan - 21-01-2019

yok yanlış anladınız.. Ben SP'nin içine Select yazmak istiyorum..

Sonucu 1 den fazla satır gelen bir Select'i SP nin içine yazmak istiyorum. Çünkü View de performans sıkıntısı yaşıyorum..


Cvp: FB Sp içinde Select - klavye - 21-01-2019

(21-01-2019, Saat: 11:57)mcuyan Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.yok yanlış anladınız.. Ben SP'nin içine Select yazmak istiyorum..

Sonucu 1 den fazla satır gelen bir Select'i SP nin içine yazmak istiyorum. Çünkü View de performans sıkıntısı yaşıyorum..

SELECT SUM(TUTAR),SUM(INDIRIM_TUTARI),SUM(ALT_ISK_TUTAR) FROM FIS_1
  union all
 SELECT SUM(TUTAR),SUM(INDIRIM_TUTARI),SUM(ALT_ISK_TUTAR) FROM FIS_2
 WHERE (FISID=:fis_id)
 into : toplam,:indirim_toplam,dip_iskonto;

Yukarıdaki kod stored procedure icerisindeki bir kod. iki tane select var ve union ile birlestirilmis into kisminda ise bu sorgu sonucunda donen degerler.
Siz bu sp ye select ile ulasmaya calistiginizda into kismindaki degerler liste halinde size donecektir.
Yine umarim yanlis anlamamisimdir Smile


FB Sp içinde Select - mcuyan - 21-01-2019

Evet şimdi doğru anlamışsınızSmile .. Bunu yaptım.. Fakat her select'de birden fazla sonuç gelebiliyor.. o zaman da patlıyoruz Smile

uygulamam daki kasa ekranı için göstertiyorum ben bunu.. Her gün farklı kasiyerlerin pos ve peşin satış listelerini göstermek için bir view kullandım.. Fakat view X tarihinden beri datayı sorgulayıp sonrasında view in where kısmında kriter verdiği içn müthiş performans kaybı yaşatıyor.. bende delphi içinde o uzun selectleri yazmak yerine dedim view de ypayım. fakat performansda patladık. bende SP de yapılabilir mi diye düşündüm Smile


Cvp: FB Sp içinde Select - klavye - 21-01-2019

(21-01-2019, Saat: 13:00)mcuyan Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.Evet şimdi doğru anlamışsınızSmile .. Bunu yaptım.. Fakat her select'de birden fazla sonuç gelebiliyor.. o zaman da patlıyoruz Smile

uygulamam daki kasa ekranı için göstertiyorum ben bunu.. Her gün farklı kasiyerlerin pos ve peşin satış listelerini göstermek için bir view kullandım.. Fakat view X tarihinden beri datayı sorgulayıp sonrasında view in where kısmında kriter verdiği içn müthiş performans kaybı yaşatıyor.. bende delphi içinde o uzun selectleri yazmak yerine dedim view de ypayım. fakat performansda patladık. bende SP de yapılabilir mi diye düşündüm Smile

   
   FOR select stok.stok_adi from stok into :stokadi
   DO
 BEGIN
     SUSPEND;
 END
  FOR select stok.stok_adi from stok into :stokadi
   DO
 BEGIN
     SUSPEND;
 END

Bu yapiyi dener misiniz. Procedure icerisinde iki tane select var. stok tablosunu sorgulayan. Sonucta ikisinin toplami gelecektir.


FB Sp içinde Select - mcuyan - 21-01-2019

Elinize sağlık hocam.. Bende tam bunu denedim ve oldu.. Buraya olduğunu yazmak için giriyordum ki cevabınızı gördüm.

View daha hızlı sanki..


Cvp: FB Sp içinde Select - klavye - 21-01-2019

(21-01-2019, Saat: 13:28)mcuyan Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.Elinize sağlık hocam.. Bende tam bunu denedim ve oldu.. Buraya olduğunu yazmak için giriyordum ki cevabınızı gördüm.

View 15ms de geliyor, SP 31ms Smile

Rica ederim. Yavaşlık hızlılık konusunda bir şey diyemeyeceğim simdi Smile


FB Sp içinde Select - anemos - 21-01-2019

(21-01-2019, Saat: 11:24)mcuyan Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız....View'e tarih kriteri verdiğim halde yine de Data çoğaldıkca view'in return süresi artıyor....

Çünkü view, parametre kabul etmez. Tüm kayıtlar döndükten sonra kriter verebiliyoruz. Ancak SP içinde önce filitreleyip sonra birleştirmek mümkün. SP' nizi bilmiyoruz ama, hatalı kullandığınızı tahmin ediyorum.


Cvp: FB Sp içinde Select - mcuyan - 21-01-2019

(21-01-2019, Saat: 19:40)anemos Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
(21-01-2019, Saat: 11:24)mcuyan Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız....View'e tarih kriteri verdiğim halde yine de Data çoğaldıkca view'in return süresi artıyor....

Çünkü view, parametre kabul etmez. Tüm kayıtlar döndükten sonra kriter verebiliyoruz. Ancak SP içinde önce filitreleyip sonra birleştirmek mümkün. SP' nizi bilmiyoruz ama, hatalı kullandığınızı tahmin ediyorum.

Biraz uzun ama ...

create or alter procedure KASA (
    TAR1 date,
   TAR2 date)
returns (
   SATTARIHI date,
   SATTIPI varchar(10),
   SATKUL varchar(10),
   TOP float)
as
begin
 for select SATTARIHI, SATTIPI, SATKUL, round(sum(SATGENELTOP), 2) as TOP
     from SBASLIK
     where SATFIRMAID <> 2 and
           (SATTARIHI between :TAR1 and :TAR2)
     group by SATTARIHI, SATTIPI, SATKUL
     into :SATTARIHI, :SATTIPI, :SATKUL, :TOP
 do
   suspend;
 -- union all
 for select SATTARIHI, SATTIPI, SATKUL, round(sum(SATGENELTOP), 2) as TOP
     from SBASLIK
     where SATFIRMAID = 2 and
           (SATTARIHI between :TAR1 and :TAR2)
     group by SATTARIHI, SATTIPI, SATKUL
     -- union all
     into :SATTARIHI, :SATTIPI, :SATKUL, :TOP
 do
   suspend;
 for select GTAR as SATTARIHI, 'GİDER' as SATTIPI, GCIKKASA as SATKUL, round(sum(GTUTAR), 2) as TOP
     from GIDER
     where (GTAR between :TAR1 and :TAR2)
     group by SATTARIHI, SATTIPI, SATKUL
     --union all
     into :SATTARIHI, :SATTIPI, :SATKUL, :TOP
 do
   suspend;
 for select SFATTAR as SATTARIHI, 'İSKONTO' as SATTIPI, SATKUL as SATKUL,
            round(sum(SFATTOPLAM - SFATANATUTAR), 2) as TOP
     from SFATDETAY
     left join SBASLIK on SFATDETAY.SFATBASID = SBASLIK.SATFATNO
     where SFATTOPLAM <> SFATANATUTAR and
           SFATTOPLAM > 0 and
           (SATTARIHI between :TAR1 and :TAR2)
     group by SFATTAR, SATTIPI, SATKUL
     order by 1, 3
     into :SATTARIHI, :SATTIPI, :SATKUL, :TOP
 do
   suspend;
end