Stored Procedure Döngü işlemleri

MS SQL Server veritabanı ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
Kullanıcı avatarı
tuna
Üye
Mesajlar: 300
Kayıt: 07 Tem 2008 04:39
Konum: İstanbul

Stored Procedure Döngü işlemleri

Mesaj gönderen tuna »

Merhaba arakadaşlar.
Forumlarda çok araştırdım ama şimdi soracağım konuyu bulamadım.
Ben şöyle bişey yapmak istiyorum bilmiyorum ama stored procedure de oluyomu bu.
Örnek olarak yazıyorum :
Diyelimki bir tablom var. bu tabloyu stored procedure de döngüye sokmak istiyorum yan. :

while tablom ...... tablonun sonuna gelene kakadr
begin
işlem
işlem
işlem...
end
ben bu döngüyü nasıl yaparım. ve tablonun o an hangi satırda olduğunu ve o satırdaki x hücrenin değerini nasıl öğrenirim.
Umarım düzgün sormuşumdur.
(Not insert into ile yapabilirsin demeyin... Ben stored procedure de döngüleri anlamak istiyorum).
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: Stored Procedure Döngü işlemleri

Mesaj gönderen sabanakman »

Fetch - Next ile bu kayıtları dolaşabilirsin.

Kod: Tümünü seç

declare @id int,@Deger char(10)
declare cur cursor for select Ref, Deger from test
open cur
fetch next from cur into @id, @Deger -->@id, ve @deger içine select ile seçilen Ref, Deger alan bilgileri gelir
while (@@FETCH_STATUS = 0) begin
  -->update test set Deger=cast(@id as nvarchar(10)) where id=@id bu @id ve @deger artık istenildiği gibi kullanılabilir.
  fetch next from cur into @id, @Deger -->@id, ve @deger içine select ile seçilen Ref, Deger alan bilgileri gelir
end
close cur
deallocate cur
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Kullanıcı avatarı
tuna
Üye
Mesajlar: 300
Kayıt: 07 Tem 2008 04:39
Konum: İstanbul

Re: Stored Procedure Döngü işlemleri

Mesaj gönderen tuna »

Tam olarak anlayamadım ben bunu.
Birazdaha açıklayıcı yazabilirmisiniz. veya başka bir örnek verebilirmisiniz.

Birde ben toplam kayıt sayısını bu döngüde nasıl alırım ve while döngüsünde tablonun en sonuna geldiğimi nasıl anlarım.
Kullanıcı avatarı
tuna
Üye
Mesajlar: 300
Kayıt: 07 Tem 2008 04:39
Konum: İstanbul

Re: Stored Procedure Döngü işlemleri

Mesaj gönderen tuna »

Stored procedure'de döngü için örnekleri olan varmıdır acaba.
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: Stored Procedure Döngü işlemleri

Mesaj gönderen sabanakman »

Yukarıda bir örnek, örnekte de bir döngü var. Örnekteki while döngüsü örneği yeterli gelmediyse (bence gayet açık ve net) sql'in çevrim içi yardımı olmadı internette arama ile bir çok örnek bulunabilir.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
anemos
Üye
Mesajlar: 111
Kayıt: 02 Nis 2007 07:51
Konum: Sakarya / Hendek

Re: Stored Procedure Döngü işlemleri

Mesaj gönderen anemos »

sabanakman yazdı:Yukarıda bir örnek, örnekte de bir döngü var. Örnekteki while döngüsü örneği yeterli gelmediyse (bence gayet açık ve net) sql'in çevrim içi yardımı olmadı internette arama ile bir çok örnek bulunabilir.
Teşekkürler... Gayet açık..
Kullanıcı avatarı
tuna
Üye
Mesajlar: 300
Kayıt: 07 Tem 2008 04:39
Konum: İstanbul

Re: Stored Procedure Döngü işlemleri

Mesaj gönderen tuna »

Peki ben döngüleri işleyebiliyorum artık ancak şöyle bir sorunum oldu acaba bunun çözümü varmıdır.

İç içe döngü çalıştırmak istiyorum yani:

while @@fetch_status=0
begin
döngü 1 işliyor
..
..
while @@fetch_status=0 ???? --(burası böylemidir bilmiyorum)
begin
döngü 2 işliyor
döngü 1 içinden değer alıcak...
...
end
döngü 1 içindeki kodlar
end

go


Herkese teşekkürler...
Kullanıcı avatarı
tuna
Üye
Mesajlar: 300
Kayıt: 07 Tem 2008 04:39
Konum: İstanbul

Re: Stored Procedure Döngü işlemleri

Mesaj gönderen tuna »

Arkadaşlar sorunumu deneme yanılma yöntemi ile çözdüm. İç içe döngüler çok güzel çalışıyor. Öğrenmek isteyen arkadaşlar için yaptığım proje örneğini aşağıya ekledim.
Yardım eden herkesten Allah razıolsun...

Kod: Tümünü seç

CREATE PROCEDURE [crm_vadeozetle] AS
declare @carino int
declare @toplamal float
declare @toplamgecmis float
declare @toplamgelecek float
declare @satistemsilcisi varchar(100)
declare @carikodu varchar(50)
declare @cariadi varchar(200)
declare @toplamalacak float
declare hesaplananvade_cur cursor
scroll
for select CARIID,SATISELEMAN,CARIKODU,CARIUNVAN,BAKIYE  from hesaplanan_vadeler order by CARIID
open hesaplananvade_cur

FETCH FIRST FROM hesaplananvade_cur into @carino,@satistemsilcisi,@carikodu,@cariadi,@toplamalacak

set @toplamal=0
set @toplamgecmis=0
set @toplamgelecek=0
truncate table VadeOzetListe2

while @@FETCH_STATUS=0
begin
declare vadehesapla_cur cursor
scroll
for select TUTAR from Vade_Hesaplama WHERE CARIID=@carino and GUN<=0 order by GUN asc
open vadehesapla_cur
FETCH FIRST FROM vadehesapla_cur into @toplamal
while @@FETCH_STATUS=0
begin
set @toplamgecmis=@toplamgecmis+@toplamal
FETCH NEXT FROM vadehesapla_cur into @toplamal
end
close vadehesapla_cur
deallocate vadehesapla_cur

declare vadehesapla_cur cursor
scroll
for select TUTAR from Vade_Hesaplama WHERE CARIID=@carino and GUN>0 order by GUN asc
open vadehesapla_cur
FETCH FIRST FROM vadehesapla_cur into @toplamal
while @@FETCH_STATUS=0
begin
set @toplamgelecek=@toplamgelecek+@toplamal
FETCH NEXT FROM vadehesapla_cur into @toplamal
end
close vadehesapla_cur
deallocate vadehesapla_cur

insert into vadeozetliste2 (CARIID,SATISTEMSILCISI,CARIKODU,CARIADI,TOPLAMALACAK,VADESIGECMIS,VADESIGELMEMIS) VALUES (@carino,@satistemsilcisi,@carikodu,@cariadi,@toplamalacak,@toplamgecmis,@toplamgelecek)
FETCH NEXT FROM hesaplananvade_cur into @carino,@satistemsilcisi,@carikodu,@cariadi,@toplamalacak
--print @toplamgecmis
--print @toplamgelecek
set @toplamal=0
set @toplamgecmis=0
set @toplamgelecek=0
end

close hesaplananvade_cur
deallocate hesaplananvade_cur
GO
baloglurecep
Üye
Mesajlar: 261
Kayıt: 21 Tem 2006 04:59
İletişim:

Re: Stored Procedure Döngü işlemleri

Mesaj gönderen baloglurecep »

tuna hocam selamlar... benimde aşağıdaki işlemi stored procedure ile yapmam gerekiyor nasıl yapabilirim. delphi içindek yaptığım kod şu şekilde.

Kod: Tümünü seç

dm.extre_query.First;
BAKIYE:=0;  // bakiye değişekni sıfırlanıyor
  WHILE NOT(dm.extre_query.EOF) DO   // döngü yapıyor
    begin
    BAKIYE2:=BAKIYE;
    IF (dm.extre_query.FieldByName('TOPLAMTUTAR').AsFloat> 0) and (dm.extre_query.FieldByName('TUR').AsString <> 'İADE')THEN
    BAKIYE:=BAKIYE+dm.extre_query.FieldByName('TOPLAMTUTAR').AsFloat;
    IF dm.extre_query.FieldByName('ODEME').AsFloat> 0 THEN
    BAKIYE := BAKIYE -  dm.extre_query.FieldByName('ODEME').AsFloat;
    dm.extre_query.Edit;
    dm.extre_query.FieldByName('SON_DURUM').AsFloat:= BAKIYE;   
    dm.extre_query.FieldByName('SON_DURUM2').AsFloat:= BAKIYE2;  
    dm.extre_query.Post;
    dm.extre_query.Next;
    end;
kayıt çok olduğunda işlem biraz uzun sürmekte. Muhtemeln stored procedure ile yapılınca zaman azalacağı kannatindeyim. Yardımcı olabilirseniz sevinirim.
Kullanıcı avatarı
tuna
Üye
Mesajlar: 300
Kayıt: 07 Tem 2008 04:39
Konum: İstanbul

Re: Stored Procedure Döngü işlemleri

Mesaj gönderen tuna »

Benim örneğe bakarak yapabilirsin. Ben orada iç içe döngüler kullanmıştım. Sen sadece bir döngü ile çalışacağın için işin kolay.
Sen başla takıldığın yer olursa stor proc kodun ile sor yine cevaplarım.
baloglurecep
Üye
Mesajlar: 261
Kayıt: 21 Tem 2006 04:59
İletişim:

Re: Stored Procedure Döngü işlemleri

Mesaj gönderen baloglurecep »

tuna hocam tekrar merhabalar... Ben döngü ile editleme ve post işlemi hiç yapmadım. orda kullanıclak kodlara hakim değilim. O yüzden rica etsem (umarım kabalık olmaz) detaylıca anlatan, benim kodlar üzerinden çalışan örnek oluşturabilirseniz çok sevinirim. ben procedur kısmından varaible seçeneğinden bakiye ve bakiye2 alanlarını tanımladım. ama nasıl kullanacağımı dönüye nasıl sokacağımın kullanımı bilemediğimden kaldı. sizden ricam bu konuda destekleriniz.

saygıyla kalınız.
Kullanıcı avatarı
tuna
Üye
Mesajlar: 300
Kayıt: 07 Tem 2008 04:39
Konum: İstanbul

Re: Stored Procedure Döngü işlemleri

Mesaj gönderen tuna »

sen stored procedure yi nerede tanımlıyorsun. Delphidemi yoksa direk sql server içindemi.
Eğer delphi tarafında soruyorsan ben onu bilmiyorum. Zaten bilsemde kullanmam. Ama sql içinden yazacaksan önce stored procedure nasıl yazılır gibi makaleler okuyarak başlamanı öneririm.
Çünkü sql'in programlama dili farklıdır.
Ufak ufak yazamaya başla. En azından mantığı kavrayabilirsin.
baloglurecep
Üye
Mesajlar: 261
Kayıt: 21 Tem 2006 04:59
İletişim:

Re: Stored Procedure Döngü işlemleri

Mesaj gönderen baloglurecep »

hocam ben firebird kullanıyorum. firebirdde stred procedure yi destekliyor. direk firebird içerisinden kullanıyorum new_procedure tanımlayarak yapıyorum. ben biraz daha araştırma yapayım. saygıyla kalın hocam yardımlarınız ve önerileriniz için teşekkür ederim.
Cevapla