Eğer bunun kendisine hakaret olduğunu düşünen varsa bu mesajı okumasına gerek yok.
HESAPKODLAR Tablosu
HESAPKODU HESAPADI
100 KASA HESABI
101 GENEL GİDERLER
102 DİĞER GELİRLER
HESAPLAR Tablosu
HESAPKODU TARIH BORC ALACAK
100 02.01.2014 52 0
101 05.04.2014 1245 0
102 06.02.2014 0 96
Yapmak istediğim procedure şu
Hesapkodlar
tablosunundkai hesapkodlarını sıralayacak
CURSOR komutu ile
Sıralarkende verilen tarih aralığına göre tüm hesapların sıra ile
SUM(BORC) VE SUM(ALACAK) Değerlerini bulmak.
Bunu Ms SQL serverda procedure olarak nasıl yazarız.
Bu procedure için firebird da yazdığım kod şu şekilde.
Kod: Tümünü seç
SET TERM ^ ;
create or alter procedure MYMIZAN (
PBASKOD varchar(30),
PBITKOD varchar(30),
SEVIYEMIN integer,
SEVIYEMAX integer,
PBASTARIH date,
PBITTARIH date)
returns (
HESAPKODU varchar(30),
HESAPADI varchar(200),
SEVIYE integer,
BORC double precision,
ALACAK double precision,
BORCBAKIYE double precision,
ALACAKBAKIYE double precision,
CARIKOD integer,
FIRMA varchar(255))
as
begin
FOR
SELECT HesapKodlar.HesapKodu, HesapKodlar.HesapAdi,HesapKodlar.SEVIYE,HesapKodlar.CARIKOD,carikodlar.firma
FROM HesapKodlar
LEFT OUTER JOIN CARIKODLAR ON (HESAPKODLAR.CARIKOD=CARIKODLAR.CARIKOD)
WHERE
(HesapKodlar.HesapKodu BETWEEN :pbaskod AND :pbitkod)
AND (HESAPKODLAR.SEVIYE BETWEEN :SEVIYEMIN AND :SEVIYEMAX)
ORDER BY HesapKodu
INTO: HESAPKODU, HESAPADI,SEVIYE,carikod, FIRMA
DO BEGIN
BORCBAKIYE=0;
ALACAKBAKIYE=0;
select round(sum(HESAPLAR.BORC),2),round(SUM(HESAPLAR.ALACAK),2) FROM HESAPLAR
WHERE (HESAPLAR.hesapkodu LIKE :HESAPKODU || '%')
AND
(HESAPLAR.tarih between :PBASTARIH AND :PBITTARIH)
INTO :BORC,ALACAK;
IF (:BORC>0) THEN
IF (:ALACAK IS NULL) THEN BORCBAKIYE=:BORC;
IF (:ALACAK>0) THEN
IF (:BORC IS NULL) THEN ALACAKBAKIYE=ALACAK;
IF (:BORC > :ALACAK) THEN BORCBAKIYE=:BORC-ALACAK;
IF (:ALACAK>:BORC) THEN ALACAKBAKIYE=:ALACAK-BORC;
BORCBAKIYE=round(BORCBAKIYE,2);
ALACAKBAKIYE=round(ALACAKBAKIYE,2);
/*SELECT * FROM MYMIZAN('100','900',0,3,'01.01.2010','12.12.2010')*/
SUSPEND;
END
END^
SET TERM ; ^