FIFO maliyetine göre hesaplama yapan bir SP hazırladım.
Yapmak istediğim:
SP ile hesaplama sonucunda miktarı tükenenlere "0" veriyorum. Dönen sonuçları Select yaparken "0" dan büyük değerleri Where kullanmadan, SP içersinde elemek istiyorum. SP de nasıl bir düzenleme gerekiyor?
Tablo yapısı ve SP aşağıdadır.
Kod: Tümünü seç
CREATE TABLE HAREKETLER
(
HAREKET_ID Integer,
STOK_ID Integer,
TARIH Date,
G_C Varchar(1) COLLATE PXW_TURK,
ACIKLAMA Varchar(40) COLLATE PXW_TURK,
MIKTAR Double precision,
FIYAT Double precision,
TUTAR Double precision
);
Kod: Tümünü seç
CREATE PROCEDURE FIFO_HESAP_LISTESI (
STK_ID Integer DEFAULT 1 )
RETURNS (
HAREKET_ID Integer,
STOK_ID Integer,
TARIH Date,
G_C Varchar(1),
ACIKLAMA Varchar(40),
MIKTAR Double precision,
BAKIYE Double precision )
AS
DECLARE GIREN_TOP_SATIR DOUBLE PRECISION DEFAULT 0;
DECLARE CIKAN_TOPLAMI DOUBLE PRECISION DEFAULT 0;
BEGIN
EXECUTE STATEMENT
'SELECT Sum(MIKTAR) FROM HAREKETLER WHERE G_C = ''C''' INTO :CIKAN_TOPLAMI;
FOR
SELECT HAREKET_ID,STOK_ID,TARIH,G_C,ACIKLAMA,MIKTAR
FROM HAREKETLER WHERE STOK_ID = :STK_ID AND G_C = 'G'
INTO :HAREKET_ID,:STOK_ID,:TARIH,:G_C,:ACIKLAMA,:MIKTAR
DO
BEGIN
GIREN_TOP_SATIR = GIREN_TOP_SATIR + MIKTAR;
IF (GIREN_TOP_SATIR - CIKAN_TOPLAMI > 0) THEN
IF (GIREN_TOP_SATIR - CIKAN_TOPLAMI < MIKTAR) THEN
MIKTAR = GIREN_TOP_SATIR - CIKAN_TOPLAMI;
ELSE
MIKTAR = MIKTAR;
ELSE
MIKTAR = 0;
BAKIYE =IIF(GIREN_TOP_SATIR - CIKAN_TOPLAMI > 0,
GIREN_TOP_SATIR - CIKAN_TOPLAMI, 0);
SUSPEND;
END
END