ABAP’ta internal table ile çalışırken en sık kullanılan komutlardan biri READ TABLE’dır.
Temel olarak bir tablonun içinden belirli bir kaydı bulmak için kullanılır.
Ama burada önemli olan nokta şu:
READ TABLE kullanımı tablo tipine göre performans açısından ciddi fark yaratır.
Temel READ TABLE Kullanımı
READ TABLE lt_table INTO ls_line
WITH KEY matnr = '123'.
Bu kullanım:
lt_table→ arama yapılan internal tablels_line→ bulunan veriWITH KEY→ arama kriteri
SY-SUBRC Kontrolü
READ TABLE sonrası her zaman kontrol yapılır:
READ TABLE lt_table INTO ls_line
WITH KEY matnr = '123'.
IF sy-subrc = 0.
" kayıt bulundu
ELSE.
" kayıt bulunamadı
ENDIF.
INDEX ile Okuma
Eğer index biliyorsan:
READ TABLE lt_table INTO ls_line INDEX 1.
- En hızlı yöntemlerden biridir
- Ama sadece sıralı erişim için uygundur
ASSIGNING ile Kullanım (Performanslı)
READ TABLE lt_table ASSIGNING FIELD-SYMBOL(<fs>)
WITH KEY matnr = '123'.
Avantajı:
- Kopyalama yapmaz
- Direkt referans üzerinden çalışır
- Daha performanslıdır
TRANSPORTING NO FIELDS
Sadece “kayıt var mı?” kontrolü için:
READ TABLE lt_table
WITH KEY matnr = '123'
TRANSPORTING NO FIELDS.
- Veri taşınmaz
- Sadece var/yok kontrolü yapılır
- Gereksiz kopyayı engeller
Internal Table Türüne Göre Performans
STANDARD TABLE
READ TABLE lt_table WITH KEY matnr = '123'.
- Lineer arama yapar
- Veri büyüdükçe yavaşlar
SORTED TABLE
- Binary search kullanır
- Daha hızlıdır
HASHED TABLE
- En hızlı erişim
- Direkt key ile bulur
WITH HEADER LINE ile READ TABLE (Önemli Not)
Eski ABAP kodlarında şu kullanım sık görülür:
DATA: lt_table TYPE STANDARD TABLE OF mara WITH HEADER LINE.
READ TABLE lt_table WITH KEY matnr = '123'.
Bu durumda:
- Sonuç header line içine gelir
- Ayrı bir work area yoktur
Yani:
WRITE lt_table-matnr.
çalışır çünkü veri header line’a gelmiştir.
Modern Kullanım (Önerilen)
DATA: lt_table TYPE STANDARD TABLE OF mara,
ls_line TYPE mara.
READ TABLE lt_table INTO ls_line
WITH KEY matnr = '123'.
- Daha okunabilir
- Daha güvenli
- SAP tarafından önerilen yöntem
Küçük Performans Notu
Gerçek projelerde en sık yapılan hata:
LOOP AT lt_table INTO ls_line.
READ TABLE lt_other WITH KEY matnr = ls_line-matnr.
ENDLOOP.
Bu yapı:
- Büyük verilerde ciddi performans sorunu yaratır
Daha iyi yaklaşım:
HASHED TABLEkullanmak- Ya da
SORTED TABLE + BINARY SEARCH
Sonuç
READ TABLE basit gibi görünür ama:
- Yanlış tablo tipi → performans problemi
- Gereksiz INTO → memory kullanımı
- Yanlış kullanım → gereksiz yavaşlık
Kısaca:
- Küçük veri → fark etmez
- Büyük veri → doğru kullanım şart
Abap’ta “work area”, “field symbol” ve “reference into” farkları için bu yazıyı inceleyebilirsiniz.
Link: http://www.mustafahamit.com/abap-work-area-field-symbol-ve-reference-into-farklari-ve-kullanimi/
![]()