Stored Procedure Raporlama Sorunu

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ı
Barch
Üye
Mesajlar: 12
Kayıt: 28 Ara 2004 06:34
Konum: İzmir

Stored Procedure Raporlama Sorunu

Mesaj gönderen Barch »

Kod: Tümünü seç

ALTER PROCEDURE TUTARKDV (
    TTRH DATE,
    BTRH DATE,
    EYIL INTEGER,
    ESIRKET SMALLINT,
    MUSNO INTEGER)
RETURNS (
    TTUTAR DOUBLE PRECISION)
AS
DECLARE VARIABLE EK_ORAN DOUBLE PRECISION;
DECLARE VARIABLE ETUTAR DOUBLE PRECISION;
DECLARE VARIABLE EDAHIL VARCHAR(1);
begin
  for select dahil,tutar,k_oran  from fatura
  where sirket_kodu =:esirket and mali_yil =:eyil and
  musteri_kodu =:musno and f_tar >=:btrh and f_tar <=:ttrh
  into :edahil,:etutar,:ek_oran
  do
begin
  if (edahil='0') then
    begin
    ttutar = etutar + (etutar * (ek_oran / 100));
    end
  else
    begin
    ttutar = etutar;
    end
end
suspend;
end
Buşekilde derlenmiş bir prosedürüm var. Ama bu tek kayıt yani tek bir sonuç döndürüyor.
Örnek -> TTUTAR='1000'

Ama ben bunu tablodaki herkayıt için hesaplayıp bir kayıt seti olarak almak istiyorum.

Kod: Tümünü seç

select f.fatura_no, t.ttutar
from fatura f, tutarkdv(:ttrh,:btrh,:eyil,:esirket,:musno,:efatura) t
where f.sirket_kodu =:esirket and f.mali_yil =:eyil and f.musteri_kodu =:musno
      and f.f_tar >=:btrh and f.f_tar <=:ttrh and f.fatura_no =:efatura
Bu sorgu ilede fatura numarası verildiği zaman yine tek kayıt için yapıyor.
Söylediğim gibi ben bunu recordset olarak tüm tablo için listelemek istiyorum.

SQL surgusunda procedure ile ilişkilendirmeye çalıştım. Procedure ile
:efatura paramını gelen kayıt setinin fatura numnarası ile ilişkilendirmeye çalıştım. Birtürlü yapamadım.

Artık bu işlem procedure ilemi sorgu ilemi yapılır bilemiyorum.
Sizlerden Yardımlarınızı bekliyorum. Herkeze Kolaygelsin.
Uğur1982
Üye
Mesajlar: 383
Kayıt: 11 Mar 2005 03:18
Konum: İzmir

Re: Store Procedure Raporlama Sorunu

Mesaj gönderen Uğur1982 »

Slm...

Suspend i yanlış yerde kullanmışsın..Yani

Kod: Tümünü seç

for select
do
begin
---
---
---
suspend;
end;
olmalı..Bu satırlar arasında olsaydı her bir satır için işlerdi.. Suspend dışarıda olduğu için sonuç olarak tek satır gönderiyor..Şöyle olmalı...

Kod: Tümünü seç

begin
  if (edahil='0') then
    begin
    ttutar = etutar + (etutar * (ek_oran / 100));
    end
  else
    begin
    ttutar = etutar;
    end
suspend; 
end;
end
Kullanıcı avatarı
Barch
Üye
Mesajlar: 12
Kayıt: 28 Ara 2004 06:34
Konum: İzmir

Mesaj gönderen Barch »

Allah razı olsun kardeşim. kaç gündür bununla uğraşıyordum. İyi Çalışmalar.
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

s.a.
Firebird forumuna taşındı.
biraz dikkat edelim.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Cevapla