Mustafa HAMIT

ABAP’ta READ TABLE Kullanımı (Detaylı Anlatım ve Örnekler)

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 table
  • ls_line → bulunan veri
  • WITH 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 TABLE kullanmak
  • 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/

Loading

Bir yanıt yazın