stored procedure output parametresi null değer dönderiyor

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ı
burakb44
Üye
Mesajlar: 131
Kayıt: 11 Mar 2005 03:13

stored procedure output parametresi null değer dönderiyor

Mesaj gönderen burakb44 »

arkadaşlar merhaba,

veritabanı içinde kullandığım bi stored procedurede gerekli işlemler yapıldıktan sonra bir sonuç bulup bu sonucu kullanmak istiyorum ama nedense procedure sürekli null değer dönderiyor. hatam nerede acaba kod aşağıda.

teşekkürler
Burak bitikçi
Malatya

Kod: Tümünü seç

begin
  T_PESINAT     = 0;
  T_TAHAKKUK    = 0;
  C_TAHSILAT_NK = 0;
  C_TAHSILAT_C  = 0;
  C_TAHSILAT_S  = 0;
  ALIS_OZET     = 0;
  F_ODEME_NK    = 0;
  F_ODEME_C     = 0;
  F_ODEME_S     = 0;
  STS_OZET      = 0;
  TOPLU_S_G     = 0;
  TOPLU_S_C     = 0;
  T_TAHSILAT_NK = 0;
  T_TAHSILAT_C  = 0;
  T_TAHSILAT_S  = 0;
  C_BORC        = 0;
  E_BAKIYE      = 0;
  E_BAKIYE      = :ESKI_BAKIYE;
  YENI_BAKIYE   = 0;
  PES_SATIS     = 0;
  P_SATIS_NK    = 0;
  P_SATIS_C     = 0;
  P_SATIS_S     = 0;
  D1            = 0;
  D2            = 0;
  D3            = 0;
  D4            = 0;
  D5            = 0;
  D6            = 0;

  SELECT SUM(TUTAR) FROM CARI_BORC WHERE CARI_KODU = :c_kodu INTO :C_BORC;

  SELECT SUM(TUTAR) FROM CARI_TAHSILAT WHERE CARI_KODU = :c_kodu AND (ODEME_TURU='NAKİT' or ODEME_TURU='KREDİ KARTI') INTO :C_TAHSILAT_NK;
  SELECT SUM(TUTAR) FROM CARI_TAHSILAT WHERE CARI_KODU = :c_kodu AND ODEME_TURU='ÇEK' INTO :C_TAHSILAT_C;
  SELECT SUM(TUTAR) FROM CARI_TAHSILAT WHERE CARI_KODU = :c_kodu AND ODEME_TURU='SENET' INTO :C_TAHSILAT_S;

  SELECT SUM(SATIS_TUTARI), SUM(PESINAT) FROM TAKSIT_TAHAKKUK WHERE CARI_KODU = :c_kodu INTO :T_TAHAKKUK, T_PESINAT;

  SELECT SUM(ALINAN) FROM CARI_TAKSIT_TAHSILAT WHERE CARI_KODU = :c_kodu AND (ODEME_TURU='NAKİT' or ODEME_TURU='KREDİ KARTI') INTO :T_TAHSILAT_NK;
  SELECT SUM(ALINAN) FROM CARI_TAKSIT_TAHSILAT WHERE CARI_KODU = :c_kodu AND ODEME_TURU='ÇEK' INTO :T_TAHSILAT_C;
  SELECT SUM(ALINAN) FROM CARI_TAKSIT_TAHSILAT WHERE CARI_KODU = :c_kodu AND ODEME_TURU='SENET' INTO :T_TAHSILAT_S;

  SELECT SUM(TUTAR) FROM STOK_G_C WHERE CARI_KODU = :c_kodu AND GIRIS_CIKIS = 'G' INTO :TOPLU_S_G;
  SELECT SUM(TUTAR) FROM STOK_G_C WHERE CARI_KODU = :c_kodu AND GIRIS_CIKIS = 'Ç' INTO :TOPLU_S_C;
  SELECT SUM(FATURA_TUTARI) FROM FATURA_OZET WHERE CARI_KODU = :c_kodu INTO :ALIS_OZET;
  SELECT SUM(FATURA_TUTARI) FROM C_FATURA_OZET WHERE CARI_KODU = :c_kodu INTO :STS_OZET;

  SELECT SUM(TUTAR) FROM FIRMA_ODEME WHERE CARI_KODU = :c_kodu AND (ODEME_TURU='NAKİT' or ODEME_TURU='KREDİ KARTI') INTO :F_ODEME_NK;
  SELECT SUM(TUTAR) FROM FIRMA_ODEME WHERE CARI_KODU = :c_kodu AND ODEME_TURU='ÇEK' INTO :F_ODEME_C;
  SELECT SUM(TUTAR) FROM FIRMA_ODEME WHERE CARI_KODU = :c_kodu AND ODEME_TURU='SENET' INTO :F_ODEME_S;

  SELECT SUM(SATIS_TUTARI) FROM PESIN_SATIS WHERE CARI_KODU = :c_kodu INTO :PES_SATIS;

  SELECT SUM(SATIS_TUTARI) FROM PESIN_SATIS WHERE CARI_KODU = :c_kodu AND (ODEME_TURU='NAKİT' or ODEME_TURU='KREDİ KARTI') INTO :P_SATIS_NK;
  SELECT SUM(SATIS_TUTARI) FROM PESIN_SATIS WHERE CARI_KODU = :c_kodu AND ODEME_TURU='ÇEK' INTO :P_SATIS_C;
  SELECT SUM(SATIS_TUTARI) FROM PESIN_SATIS WHERE CARI_KODU = :c_kodu AND ODEME_TURU='SENET' INTO :P_SATIS_S;

  BORCLAR   = 0;
  ALACAKLAR = 0;
  BORCLAR   = C_BORC + T_TAHAKKUK + TOPLU_S_C + STS_OZET + F_ODEME_NK + F_ODEME_C + F_ODEME_S + PES_SATIS;
  ALACAKLAR = P_SATIS_NK + P_SATIS_C + P_SATIS_S + T_PESINAT + C_TAHSILAT_NK + C_TAHSILAT_C + C_TAHSILAT_S + ALIS_OZET + TOPLU_S_G + T_TAHSILAT_NK + T_TAHSILAT_C + T_TAHSILAT_S;

  YENI_BAKIYE =  BORCLAR - ALACAKLAR;

      D1 = :T_TAHAKKUK + :F_ODEME_NK + :STS_OZET + :TOPLU_S_C + :C_BORC + :PES_SATIS;
      D2 = :F_ODEME_NK ;
      D3 = :F_ODEME_S;
      D4 = :P_SATIS_NK + :T_PESINAT + :C_TAHSILAT_NK + :ALIS_OZET + :TOPLU_S_G + :T_TAHSILAT_NK;
      D5 = :P_SATIS_C + :C_TAHSILAT_C + :T_TAHSILAT_C;
      D6 = :P_SATIS_S + :C_TAHSILAT_S + :T_TAHSILAT_S;
      sonuc = D1;
/*      UPDATE CARI SET BORCU   = :D1,
                VERILEN_CEK   = :D2,
                VERILEN_SENET = :D3,
                ALACAK        = :D4,
                ALINAN_CEK    = :D5,
                ALINAN_SENET  = :D6,
                TOPLAM_BAKIYE = :YENI_BAKIYE WHERE CARI_KODU = :C_KODU;*/
  suspend ;
end
Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Mesaj gönderen Hakan Can »

NULL kavramı üzerinde biraz çalışmalısın.
Örneğin: 100 + 200 + NULL = NULL' dur. Yani 300 değildir.

SELECT SUM(TUTAR) FROM CARI_BORC WHERE CARI_KODU = :c_kodu INTO :C_BORC;

yerine

SELECT COALESCE(SUM(TUTAR), 0) FROM CARI_BORC WHERE CARI_KODU = :c_kodu INTO :C_BORC;

şeklinde kodlarını düzeltmelisin. Yani COALESCE fonksiyonunu kullanmalısın.

Diğer bir alternatif de:
SELECT SUM(TUTAR) FROM CARI_BORC WHERE CARI_KODU = :c_kodu INTO :C_BORC;

kodundan sonra:

IF (C_BORC IS NULL) THEN C_BORC = 0;

gibi kontroller koymalısın.

İyi çalışmalar.
Kullanıcı avatarı
naile
Admin
Mesajlar: 1873
Kayıt: 11 Haz 2003 10:11

Mesaj gönderen naile »

Lütfen delphi içermeyen sql sorularınızı veritabanı forumuna sorunuz.
Kullanıcı avatarı
burakb44
Üye
Mesajlar: 131
Kayıt: 11 Mar 2005 03:13

Mesaj gönderen burakb44 »

Hakan Can kardeş teşekkürler ifade ettiğin fonksiyon sayesinde problemim halloldu. arkadaşlara bi sorum daha olacak peki stored procedure içinde select ile seçtiğim kayıtların arasından tarih baz alınarak sıraya koyulduğunda en son eklenen tarihteki kaydın içeriğindeki bi tarih bilgisini nasıl alabilirim.

teşekkürler
Cevapla