SQL LIFE

Sap Abap Sorted & Hashed Internal Table Kullanımı

Sap abap field symbols kullanımı , hashed table sorted table kullanımı


Merhaba bu yazımda, abap’da çok kullanılan loop, read table, field symbols işlemlerinden bahsedeceğim. Performans açısından tanımladığınız internal table’ın  sorted veya hashed olduğu işlediğiniz veriye göre önem kazanmaktadır.
İnternal table, yani itab’nızda devasa sayıda kompleks kayıt söz konusu ise ve bu itab’dan ihtiyacımız olan alanları okumak istediğimizde performans açısından sorun yaşamamızı önleyen yöntemler olan binary search veya hashed table kullanılır.
Loop ederken ise sorted table key kullanılması performans açısından tercih edilmektedir.
field symbol, veriyi işlerken ram'de direkt adresi referans aldığından dolayı modify kullanmamıza gerek kalmadan alanı güncellemizi sağlar ve performans açısından faydalıdır.
 

field-symbols: <wa_data> like wa_data.
assign wa_data to <wa_data>.

data: gt_tablo2 type hashed table of  zcl_dm_endeks_blokaj=>gs_data
with unique key primary_key
components equnr zzzwart onceki  .
 

hashed internal table’da seçtiğim 3 alan bir araya gelerek primary key’i oluşturuyor ve bu üç alanı, read table kullanırken istediğim kayda  erişmemi sağlayan alanlar olarak kullanacağım. Bu sayede performanslı bir şekilde çalışmasını sağlayabilirim.
 

 

  loop at gt_data  assigning  <wa_data>.
    read table gt_tablo2 into wa_data with key equnr = <wa_data>-equnr
    zzzwart = <wa_data>-zzzwart
    onceki = <wa_data>-onceki  .
    if sy-subrc = 0.
      move-corresponding <wa_data> to <wa_data2>.

      <wa_data2>-v_ilk = wa_data-v_ilk + wa_data-n_ilk.
      <wa_data2>-v_son = <wa_data>-v_son + <wa_data>-n_son.
      <wa_data2>-ilk_ables = wa_data-ilk_ables.
      <wa_data2>-zzzwart2 = <wa_data>-zzzwart.

      <wa_data2>-ilkatim = wa_data-ilkatim.
      append <wa_data2> to gt_data2.
      clear: <wa_data>,<wa_data2>.
    else.
      move-corresponding <wa_data> to <wa_data2>.
      <wa_data2>-v_son = <wa_data>-v_son + <wa_data>-n_son.
      <wa_data2>-zzzwart2 = <wa_data>-zzzwart.
      append <wa_data2> to gt_data2.
    endif.

  endloop.
 

Diğer bir örneği ise sorted table ve hashed table beraber kullanarak görelim. Performans açısından, Loop işlemi yaparken sorted table tercih edilir, read işleminde ise hashed table. Bnu yaparken Internal table anahtarlarınızı doğru şekilde ayarlamalısınız.
Zevolving’deki makaleden de görülebileceği üzere benchmark’da sorted ve hashed performansı belirtilmiş, hashed’in sorted’dan read işleminde daha performanslı olduğu gözlemlenmiştir.
 

 

data: gt_abone type sorted table of gs_abone with unique key vkonto,
	gt_toplam type hashed table of gs_toplam with unique key vkont with header line.

loop at gt_abone assigning <wa_abone> .

      read table gt_toplam into data(wa_toplam) with key vkont = <wa_abone>-vkonto .
      if sy-subrc = 0.
        <wa_abone>-toplam_tuketim = <wa_abone>-toplam_tuketim + wa_toplam-i_abrmenge.
        durum = 'X'.
        durumabo = 'X'.
      else.
        durumabo = 'Y'.
      endif.
 
    endloop.
Umarım faydalı bir yazı olmuştur, bir başka makalede görüşmek üzere.
#
Ezgim Çelik
They didn't know it was impossible, so they did it - Mark Twain