s.a. arkadaşlar.
firebirdde iki tarih arasındaki kayıtları tek tek gezmek için bir döngü kurulabilirmi acaba. veya böyle bir döngüyü nasıl kurabiliriz.
Firebird SP de Tarih döngüsü
Firebird SP de Tarih döngüsü
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Re: Firebird SP de Tarih döngüsü
Kod: Tümünü seç
CREATE PROCEDURE ARIZARAPORU(
ILKTARIH DATE,
SONTARIH DATE,
ARIZAM1 VARCHAR(20) CHARACTER SET NONE)
RETURNS(
PLAKAM VARCHAR(10) CHARACTER SET NONE,
TARIHIM DATE,
SIRANO INTEGER,
TESLIMAL VARCHAR(30) CHARACTER SET NONE,
BITISTARIHIM DATE)
AS
begin
for
select distinct t.sirano, t.plaka,t.tarih,t.teslimalan,t.bitistarih from tamir t
left join tamhar h on h.sirano=t.sirano
where t.tarih > :ilktarih and t.tarih < :sontarih and h.ariza = :arizam1
into :sirano,:plakam,:tarihim,:teslimal,:BITISTARIHIM
do
suspend;
end^
Listeler üzerinde işlem yapacaksan, do dan sonra begin end ile istediğini yapabilirsin.
Aşagıdaki örnek, mazbata oluşturmak için 5-6 yıl önce yazılmıştı.
SQL konusunda o dönem yeni oldugumdan kod çok temiz degil, ama sanırım fikir vermesi için yardımcı olur.
MAZOLUS harket tablolardan gelen bilgilerin toplamın, bir başka tabloya ekliyor.
Aslında sum larla çok daha basit tasarlanabilirdi.
Kod: Tümünü seç
CREATE PROCEDURE MAZOLUS(
ID SMALLINT)
RETURNS(
SONUC INTEGER)
AS
declare variable RAFILK VARCHAR(10);
declare variable RAFSON VARCHAR(10);
declare variable ILKTARIH DATE;
declare variable SONTARIH DATE;
declare variable DEVIRTARIH DATE;
declare variable TARIHVAR VARCHAR(1);
declare variable DEFTERVAR VARCHAR(1);
declare variable DEVMIK NUMERIC(16, 2);
declare variable DEVTUT NUMERIC(16, 2);
declare variable ALMIK NUMERIC(16, 2);
declare variable ALTUT NUMERIC(16, 2);
declare variable VERMIK NUMERIC(16, 2);
declare variable VERTUT NUMERIC(16, 2);
declare variable BAKMIK NUMERIC(16, 2);
declare variable BAKTUT NUMERIC(16, 2);
declare variable RAFNO1 VARCHAR(10);
declare variable RAFADI1 VARCHAR(30);
declare variable TIP1 VARCHAR(1);
declare variable MIK1 NUMERIC(16, 2);
declare variable TUT1 NUMERIC(16, 2);
begin
delete from mazbata where id=:id;
select ilkraf,sonraf,ilktarih,sontarih,devirtarih,tarihvar,deftervar
from maztanim where id=:id
into :rafilk,:rafson,:ilktarih,:sontarih,:devirtarih, :tarihvar,:deftervar ;
FOR
select RAFNO,RAFADI,DEVIR,DEVIRTUTARI
from STOK
where RAFNO > :rafilk and RAFNO < :rafson
into :RAFNO1,:RAFADI1,:DEVMIK,:DEVTUT
do
begin
if (devtut is null) then devtut=0;
if (devmik is null) then devmik=0;
vermik=0;
vertut=0;
almik=0;
altut=0;
bakmik=0;
baktut=0;
if (tarihvar='A') then
begin
for
select s.tip,sum(s.miktar),sum(s.tutar) from stmar s
left join stmak h on h.tip=s.tip and h.makbuzno = s.makbuzno
where rafno=:rafno1 and tarih < :devirtarih
group by s.tip
into :tip1,:mik1,:tut1
do
begin
if (mik1 is null) then mik1=0;
if (tut1 is null) then tut1=0;
if (tip1='A') then
begin
almik=mik1;
altut=tut1;
end
if (tip1='B') then
begin
vermik=mik1;
vertut=tut1;
end
end
devmik=devmik+almik-vermik;
devtut=devtut+altut-vertut;
vermik=0;
vertut=0;
almik=0;
altut=0;
bakmik=0;
baktut=0;
end
for
select s.tip,sum(s.miktar),sum(s.tutar) from stmar s
left join stmak h on h.tip=s.tip and h.makbuzno = s.makbuzno
where rafno=:rafno1 and tarih >= :ilktarih and tarih <= :sontarih
group by s.tip
into :tip1,:mik1,:tut1
do
begin
if (mik1 is null) then mik1=0;
if (tut1 is null) then tut1=0;
if (tip1='A') then
begin
almik=mik1;
altut=tut1;
end
if (tip1='B') then
begin
vermik=mik1;
vertut=tut1;
end
end
bakmik = devmik + almik - vermik;
baktut = devtut + altut - vertut;
insert into mazbata (id,rafno,rafadi,devirmik,devirtut,almik,altut,vermik,vertut,bakmik,baktut)
values (:id,:rafno1,:rafadi1,:devmik,:devtut,:almik,:altut,:vermik,:vertut,:bakmik,:baktut);
vermik=0;
vertut=0;
almik=0;
altut=0;
bakmik=0;
baktut=0;
end
if (deftervar = 'A') then
begin
select sum(miktar),sum(tutar) from defhar7
where tarih >= :ilktarih and tarih <= :sontarih
into :mik1,:tut1;
if (mik1 is null) then mik1=0;
if (tut1 is null) then tut1=0;
insert into mazbata (id,rafno,rafadi,devirmik,devirtut,almik,altut,vermik,vertut,bakmik,baktut)
values (:id,'DEFTER7','7. DEFTER ',0,0,:mik1,:tut1,:mik1,:tut1,0,0);
end
end^
Re: Firebird SP de Tarih döngüsü
@emin_as; ilgin için teşekkür ederim.
ancak istediğim tarih1 den tarih2 ye kadar bir döngü.
tarih aralığına göre filitrelemek değil.
ancak istediğim tarih1 den tarih2 ye kadar bir döngü.
tarih aralığına göre filitrelemek değil.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Re: Firebird SP de Tarih döngüsü
Evet yanlış anlamışım, while ile yapılabiliyor, for ile hiç denemedim.
Belki For select ile de yapılabilir, denemek lazım.
Belki For select ile de yapılabilir, denemek lazım.
Kod: Tümünü seç
CREATE PROCEDURE NEW_PROCEDURE
RETURNS(
CIKTI DATE,
RAKAM SMALLINT)
AS
DECLARE VARIABLE TARIH DATE;
BEGIN
TARIH = 'TODAY';
RAKAM = 1;
while ( TARIH < '12/01/2010') do
begin
RAKAM = RAKAM+1;
TARIH = TARIH +1;
CIKTI = TARIH;
SUSPEND;
end
END;
Re: Firebird SP de Tarih döngüsü
evet bu işime yarıyabilir.
teşekkür ediyorum.
teşekkür ediyorum.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim