Loop kavramı ile Troia eğitimlerimize devam ediyoruz.

Loop bir tablo üzerinde döngü oluşturup tüm verileri üzerinde dönmemizi sağlayan sistemdir.

Temel Kullanım

En temel kullanımı budur.

Burada üzerinden dönülecek tablo ismi ya da TMP tablo ismi ya da projede bulunan Grid ismi verilmelidir. Grid ismi de aslında bir anlamda bir TMP tablodur.

TMP TABLO Nedir?

Projemiz üzerinde kod ile oluşturduğumuz tablolara TMP tabloları denir. Üzerinde işlemler yapılabilir.

Gördüğümüz gibi TMP tabloları tanımlanabilir.

Loop konumuza geri dönelim şimdi.

Tablo ismi verildikten sonra döngünün başladığını belirten ifade BEGIN kullanılır.

Daha sonra geriye yapılması gereken tüm işlerin kodları yazılır.

Burada döngü her döndüğünde ilgili satırdaki verileri seçer onlar üzerinde işlem yapar.

Her döngü ENDLOOP; ifadesi ile bitmelidir.

Bir önceki projemizden bir örnekle devam edelim.

Personel Yönetim Sistemi projemizde DELETE metodu içinde LOOP kullanmıştık.

LOOP AT diye başladık. Daha sonra Grid’in ismini verdik. Bu tablo üzerinde döneceksin bilgisi.

Daha sonra BEGIN ile başladı döngü.

Seçili satırları silme işlemi yapacağımızdan bir IF şartı ile gelen satırın seçili olup olmadığına baktık.

Burada bir durumdan bahsetmeliyim. Bir Grid üzerinde seçili bir satırın Action Flag değeri seçili durumu 1 olarak ayarlanır. Seçili olmayan tüm değelerin SELECTED action flag’i 0 olarak set edilmiştir.

Seçili satırları sildik.

En sonunda tüm işlemleri gerçekleştirip ENDLOOP ile bitiriyoruz.

Sorgulama Anı

Şimdi şunu sorgulayalım. Loop bir tablo üzerinde dönüyor var olan tüm verileri üzerinde işlem yapıyor. GRİD üzerinde 50 000 kayıt olsa. Sadece tek satır veriyi seçip silmek istesek. Bu öğrendiğimiz yapıda 50 000 kayıt üzerinde dönecek ve sadece seçili olan tek satırı silecekti. Bu işlem inanılmaz bir performans kaybına neden olacaktır. çünkü 500 00 kaydı 500 000 yaparsak performans değerlerimiz daha da düşecektir.

Peki napacağız bunun bir çözümü yok mu?

Bunu çözmüşler. Loop yapısının 4 farklı kullanım şekli vardır.

  1. Yöntem ilk anlattığımız yöntemdi.

 

2. WHERE [Logical_Expression] Yapısı

Buna hemen bir örnek oluşturalım. Az önceki tablomuzda sadece Personel No’su 10002, adı Ferhat olanlar üzerinde dönsün. Ve o kişi seçiliyse de silsin.

Şöyle bir şeyde olabilirdi. Seçili satırları herhangi bir kritere tabi tutmadan silinecek deseydik onun için şöyle bir şart yazabilirdik.

Yukarıdaki sistemde sadece seçili olan veriler üzerinde dönecektir. Artık aşağıda silme işleminden önce bir kere daha seçili satırları kontrol etmeye gerek yoktur o yüzden onları açıklama satırı haline getirdik.

3.   CRITERIA COLUMNS & VALUES

Şu anda anlatacağımız yapı şimdiye kadar anlattığımız 2 yapıdan çok daha performanslı bir yapı. Hemde %2500 daha performanslı.


Az önceki senaryomuzu bu sisteme uyarlayalım.

Not: Kolon ismi yazılırken tablo ismi ile beraber yazılmamalıdır. PERSONELBILGISI_PERSONELNO  bu kullanım hatalıdır.

4. CRITERIA INDEXED

Şimdi sizlere çok çok büyük bir performans canavarından bahsedeceğim.


Genel kullanımı bu şekildedir.

BUILDHASHINDEX ile tabloya ait INDEXLER dinamik olarak oluşturulur. O yüzden tablo üzerinde  yapılan değişikliklerin tekrar tanınabilmesi için bu şekilde dinamik olarak oluşturulmalıdır.

Bu yapı diğer tüm yapılardan %35 000 kat daha performanslıdır.

Loop kavramı bu şekildeydi.

Bir sonraki yazımda görüşmek üzere.


muratbilginer