Select sorgu sonucunu değere atama

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
mero
Üye
Mesajlar: 109
Kayıt: 04 Mar 2005 04:54

Select sorgu sonucunu değere atama

Mesaj gönderen mero »

S.A arkadaşlar

Normalde SP lerde Triggerlarda değişken tanımlayıp

Kod: Tümünü seç

Select kolon from tablo where şart into değişken 
yapabiliyoruz.

Benim ihtiyacım ise rapor için normal select sorgusunda dönen veriyi değikene atamak.Yapılabiliyormu bilmiyorum.
örneğin:

Kod: Tümünü seç

select cinsi,(select Sum(miktar) from stok_giris) as toplam_giris,(select Sum(miktar) from stok_cikis) as toplam_cikis,
(select Sum(miktar) from stok_giris)-(select Sum(miktar) from stok_cikis) as stok_miktari from stok where 
((select Sum(miktar) from stok_giris)-(select Sum(miktar) from stok_cikis))<>0

parantezler içindeki select sorguları değişkenlere atayabilsem tekrar tekrar çalıştırmaya gerek kalmayacak ve hızı arttıracak.
Tabi bunu örnek olsun diye verdim Sql sorgum tam olarak bu değil biraz daha karışık.
İstediğim bu durumda değişken kullanılabilirmi ?
Kullanıcı avatarı
selimr
Üye
Mesajlar: 556
Kayıt: 16 Eki 2003 02:07

Mesaj gönderen selimr »

Kod: Tümünü seç

degisken := query.fieldbyname['alan_adi'].asstring;
..
degisken := query.fieldbyname['alan_adi'].asinteger;
..
degisken := query.fieldbyname['alan_adi'].asflaat;

 
gibi;
mero
Üye
Mesajlar: 109
Kayıt: 04 Mar 2005 04:54

Mesaj gönderen mero »

Tam olarak anlatamamışım zannedersem!

select cinsi,
(select Sum(miktar) from stok_giris) as toplam_giris,//burda sum sonunucu dönen değer
(select Sum(miktar) from stok_cikis) as toplam_cikis,//ve burdaki değer değişkene atılabilirse
(select Sum(miktar) from stok_giris)-(select Sum(miktar) from stok_cikis) as stok_miktari
from stok where
((select Sum(miktar) from stok_giris)-(select Sum(miktar) from stok_cikis))<>0 //burada tekrardan aynı sorgular kullanılmazdı
bgoktas
Kıdemli Üye
Mesajlar: 769
Kayıt: 27 Nis 2004 10:32
Konum: istanbul

Mesaj gönderen bgoktas »

arkadaşın verdiği cevapta onu diyor zaten :wink:

Kod: Tümünü seç

toplam_giris := query.fieldbyname['toplam_giris'].asstring;
dersen değişkene alırsın dönen değeri.



Kolay Gelsin...
mero
Üye
Mesajlar: 109
Kayıt: 04 Mar 2005 04:54

Mesaj gönderen mero »

Yok arkadaşlar ben istediğimi anlatamıyorum..
Verdiğiniz cevaplar için teşekkür ederim ama istediğim şey değil.

yukarda yazdığım Sql tek bir sorgu iki farklı sorgu yok ki ben aradaki alt sorgudan dönen değeri bir değişkene aktarıp ikinci bir kez veri tabanına bir sorgu göndereyim.
Yukardaki sorgu çalışıyor ama yavaş çünkü sonuca gitmek için aynı alt sorguyu 3 kez kullanmışım.
Ben bir kere alt sorgu kullanıp burdan dönen değeri bir değişkene atıp ikinci sefer alt sorgu kullanmamak istiyorum. buda zannedersem olamayacak gibi görünüyor.
Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Mesaj gönderen Hakan Can »

İsteğini gerçekleştirebiliyorsun ancak FireBird 2.0'da veya diğer VT'lerde (Örneğin MS-SQL Server).

İsteğini SUB SELECT QUERY'leri ile hallediyorsun.

Örneğin:

Kod: Tümünü seç

select
  T1.cinsi,
  T1.toplam_giris,
  T1.toplam_cikis,
  T1.toplam_giris-T1.toplam_cikis as stok_miktari
FROM (select
        cinsi,
        (select Sum(miktar) from stok_giris) as toplam_giris,
        (select Sum(miktar) from stok_cikis) as toplam_cikis
      from stok
      ) T1
where T1.toplam_giris-T1.toplam_cikis <> 0
Gerçi hız sorununu index'lerle veya alternatif SELECT query'leri ile halletmeyi deneyebilirsin. Zira VT'ler aynı olan işleri normalde tekrar tekrar yapmazlar.

İyi çalışmalar.
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

mero yazdı:Tam olarak anlatamamışım zannedersem!

select cinsi,
(select Sum(miktar) from stok_giris) as toplam_giris,//burda sum sonunucu dönen değer
(select Sum(miktar) from stok_cikis) as toplam_cikis,//ve burdaki değer değişkene atılabilirse
(select Sum(miktar) from stok_giris)-(select Sum(miktar) from stok_cikis) as stok_miktari
from stok where
((select Sum(miktar) from stok_giris)-(select Sum(miktar) from stok_cikis))<>0 //burada tekrardan aynı sorgular kullanılmazdı
Aslında zaten kullanılmaması lazım. Veritabanı motorunda optimizasyondan sorumlu kodun sorgu içinde zaten hesapladığı bu değeri aynen where sorgusuna da yansıtması ve bunu bir kere hesaplaması gerekir.

Bahsettiğin gibi sorguyu bölmenin hız sağlamaktan çok kaybettireceğini düşünüyorum.
mero
Üye
Mesajlar: 109
Kayıt: 04 Mar 2005 04:54

Mesaj gönderen mero »

Cevaplarınız dan dolayı çok teşekkür ederim
Benim öğrenmek istediğim yapılıp yapılamayacağı idi. Hakan hocam sağ olsun Firebird 2.0 de yapılıyormuş öğrendik. Benim için bilinmesi gereken bir alternatif olacak.
Teşekürler.
Cevapla