SP'deki hata nerde Arkadaşlar?

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
R.K.
Üye
Mesajlar: 82
Kayıt: 02 Nis 2007 12:05
Konum: Adana

SP'deki hata nerde Arkadaşlar?

Mesaj gönderen R.K. »

Benim sorum fb de oluşturduğum stored procedure ile. 2 adet tablom var. Ürün tablosunda daha önceden tanımladığım ürünleri barkodtan okuttukça satış tablosuna ekleniyor.

TBL_URUN
URUN_ID
URUN_AD
BIR_FIYAT
BARKOD

TBL_SATIS
SATIS_ID
URUN_ID
TARIH
Bu 2 tabloyu pk ve fk olarak birbirinede bağladım bunda da sorun yok. Şöyle birşey yapmak istiyorum bir sp oluşturarak parametre olarak yolladığım tarihdeki satışların toplamını döndersin bana.Bunun içinde şöyle bir sp yazdım ve ibexpert içinden denedim sonuç alamadım. Hata nerde yardımcı olursanız sevinirim arkadaşlar..

Kod: Tümünü seç

CREATE PROCEDURE SP_KASATOPLAM (
    tarih date)
returns (
    toplam float)
as
begin
  /* Procedure Text */
  select sum(TBL_URUN.BIR_FIYAT) from tbl_urun, tbl_satis where TBL_SATIS.TARIH=:TARIH
  into :toplam;
  suspend;
end^
Satış tablosunu koddan çıkarınca toplamı alıyor. Birden çok değerde döndürmüyorum. Eğer çok basit bir hataysa mazur görün arkadaşlar çünkü yeni yeni öğreniyorum. Kolay gelsin...
mahsuni
Üye
Mesajlar: 99
Kayıt: 21 Haz 2003 01:09
Konum: Ankara-Mamak

Mesaj gönderen mahsuni »

Kod: Tümünü seç

CREATE PROCEDURE SP_KASATOPLAM ( 
    tarih date) 
returns ( 
    toplam float) 
as 
begin 
  /* Procedure Text */ 
  select sum(TBL_URUN.BIR_FIYAT) from tbl_urun, tbl_satis 
  where tbl_urun.URUN_ID=tbl_satis.URUN_ID and  TBL_SATIS.TARIH=:TARIH 
  into :toplam; 
  suspend; 
end^
R.K.
Üye
Mesajlar: 82
Kayıt: 02 Nis 2007 12:05
Konum: Adana

Yine çalışmadı :(

Mesaj gönderen R.K. »

Mahsuni çok teşekkürler ama yine çalıştıramadım. Tablo yapılarını göndersem bir baksanız sorun bunda mı bende anlamdım. Ibexpert içinden denedim bu Sp'yi ama olmadı :(

Kod: Tümünü seç

CREATE GENERATOR GEN_TBL_URUN_ID;

CREATE TABLE TBL_URUN (
    URUN_ID    DMN_URUN_ID NOT NULL /* DMN_URUN_ID = INTEGER NOT NULL */,
    URUN_AD    DMN_URUN_AD /* DMN_URUN_AD = VARCHAR(25) NOT NULL */,
    BARKOD     DMN_BARKOD NOT NULL /* DMN_BARKOD = VARCHAR(25) DEFAULT '-1' */,
    BIR_FIYAT  DMN_BIRFIYAT /* DMN_BIRFIYAT = FLOAT */
);
ALTER TABLE TBL_URUN ADD CONSTRAINT PK_TBL_URUN PRIMARY KEY (URUN_ID);
CREATE UNIQUE INDEX TBL_URUN_IDX_AD ON TBL_URUN (URUN_AD);
CREATE UNIQUE INDEX TBL_URUN_IDX_BAR ON TBL_URUN (BARKOD);

Kod: Tümünü seç

CREATE GENERATOR GEN_TBL_SATIS_ID;

CREATE TABLE TBL_SATIS (
    SATIS_ID  BIGINT NOT NULL,
    URUN_ID   DMN_URUN_ID /* DMN_URUN_ID = INTEGER NOT NULL */,
    ZAMAN     DMN_ZAMAN /* DMN_ZAMAN = TIMESTAMP DEFAULT 'NOW' NOT NULL */,
    TARIH     DMN_TARIH /* DMN_TARIH = DATE */
);
ALTER TABLE TBL_SATIS ADD CONSTRAINT PK_TBL_SATIS PRIMARY KEY (SATIS_ID);
ALTER TABLE TBL_SATIS ADD CONSTRAINT FK_TBL_SATIS_1 FOREIGN KEY (URUN_ID) REFERENCES TBL_URUN (URUN_ID) ON DELETE CASCADE ON UPDATE CASCADE;
CREATE INDEX TBL_SATIS_IDX1 ON TBL_SATIS (URUN_ID);
CREATE INDEX TBL_SATIS_IDX_TARIH ON TBL_SATIS (TARIH);

Kod: Tümünü seç

CREATE PROCEDURE SP_KASATOPLAM (
    tarih date)
returns (
    toplam float)
as
begin
  /* Procedure Text */
  select sum(TBL_URUN.BIR_FIYAT) from tbl_urun, tbl_satis 
  where tbl_urun.URUN_ID=tbl_satis.URUN_ID and  TBL_SATIS.TARIH=:TARIH 
  into :toplam;
  suspend;
end^

SET TERM ; ^

GRANT SELECT ON TBL_URUN TO PROCEDURE SP_KASATOPLAM;

GRANT SELECT ON TBL_SATIS TO PROCEDURE SP_KASATOPLAM;

GRANT EXECUTE ON PROCEDURE SP_KASATOPLAM TO SYSDBA;
Arkadaşlar tablo yapısı ve SP bu. Tarih alanını ibexpert içinden parametre olarak göndermeme rağmen sonuç alamıyorum :(
Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Mesaj gönderen Hakan Can »

Galiba DATE ile TIMESTAMP karışmış.

Tablonda TARIH gün ve saat şeklinde. SP'de sadece gün şeklinde.

Sonuçta SP'den ancak parametredeki gün'ün gece 12:00'daki değerleri dönecektir.

SP'yi şöyle dener misin:

Kod: Tümünü seç

CREATE PROCEDURE SP_KASATOPLAM ( 
    tarih date)
returns (
    toplam float)
as
begin
  /* Procedure Text */
  select sum(TBL_URUN.BIR_FIYAT) from tbl_urun, tbl_satis
  where tbl_urun.URUN_ID=tbl_satis.URUN_ID and  CAST(TBL_SATIS.TARIH AS DATE)=:TARIH
  into :toplam;
  suspend;
end^
İyi çalışmalar.
R.K.
Üye
Mesajlar: 82
Kayıt: 02 Nis 2007 12:05
Konum: Adana

Teş. Çalıştı :d

Mesaj gönderen R.K. »

Hakan can çok teş. çalıştı. Fakat tablomdaki alana baktımda timestamp değilde date olarak tanımlamışım :!: Sayenizde öğrenicem bu sql, firebird inşallah. Kolay gelsin.
Cevapla