Hashed Tabellen und Sorted Tabellen

Aus SAP-Wiki
Zur Navigation springenZur Suche springen

Hashed Tabellen und Sorted Tabellen können mit der gleichen Syntax gefüllt werden.

Es ist performanter Datensätze zu einer Hashed-Tabelle hinzuzufügen. Die Datensätze stehen ungeordnet in der Hash-Tabelle und neue Sätze können einfach ans Ende der Tabelle hinzugefügt werden. Sortierte Tabelle müssen jeweils an der richtigen Stelle einsortiert werden, was aber durch "INSERT wa INTO TABLE itab" automatisch passiert. Bei "INSERT wa INTO itab" (ohne Zusatz TABLE) muss die Position "von außen" mit einem Index bestimmt werden.

Die Hashed Tabelle eignet sich dann optimal, wenn nach dem vollständigen Schlüssel der Tabelle gefragt wird. Die Zugriffszeit beim Lesen eines Satzes einer Hashed Tabelle ist unabhängig von der Anzahl der Datensätze in der Hashed Tabelle. Die Zugriffszeit bei Sorted Tabellen nimmt mit der Anzahl der Datensätze logarithmisch zu.

Anwendungsfall Materialfelder für Hash-Tabelle als Puffertabelle

  • Ein häufiger Anwendungsfall zur Performancesteigerung ist das Lesen von Materialdaten zu einer Materialnummer.
  • Man hat eine interne Tabelle, in der in einer Spalte die Materialnummer ist. Diese Materialnummern können aber mehrfach in der Tabelle auftauchen. Man möchte nun nicht die relativ aufwendigen Leseroutinen durchlaufen, wenn das Material bereits gelesen wurde.
Types: begin of ty_mat,
 matnr type matnr,
 maktx type makt-maktx,
 ...,
 end of ty_mat.
 
Data: lt_mat type hashed table of ty_mat with unique key matnr,
      ls_mat type ty_mat.


loop at lt_itab into data(ls_itab).
  read table lt_mat into ls_mat with key matnr = ls_itab-matnr.

  if sy-subrc = 0.
    output-matnr = ls_mat-matnr.
    output-maktx = ls_mat-maktx.
    ...
  else.
 * Leseroutinen ...
   ls_mat-matnr = ls_itab-matnr.
   ls_mat-maktx = ..
   ..
   INSERT ls_mat INTO TABLE lt_mat. 
 endif.
endloop.

Coding Hash Tabelle

  • Eine Hash-Tabelle wird im Data deklariert mit "type hashed table" und der Key der Tabelle wird mit "with unique key <feld1> <feld2> .." angegeben.

Typisierung und Data Felder

Types: begin of ty_hash,
       feld1 type char1,
       feld2 type char2,
       end of ty_hash.

Data: lt_hash type hashed table of ty_hash 
                   with unique key feld1,       "feld1 wird hier als Key der Hashtabelle definiert
      ls_hash type ty_hash.

Tabelle füllen

read table lt_hash into ls_hash with key feld1 = 'T'.

"Aufwendig zu lesende Daten, da diese noch nicht gepuffert sind
if sy-subrc <> 0.
 ls_hash-feld1 = ...
 ls_hash-feld2 = ...
 INSERT ls_hash INTO TABLE lt_hash.         "Datensatz wird zur Hashtabelle hinzugefügt
endif.

bzw. in neuer Syntax

if sy-subrc <> 0.
 ls_hash = value #( feld1 = ...
                    feld2 = ... ).
 INSERT ls_hash INTO TABLE lt_hash.         "Datensatz wird zur Hashtabelle hinzugefügt
endif.

Tabelle lesen

  • Eine Hash-Tabelle wird genauso wie eine Standardtabelle oder Sorted Table gelesen. Wichtig ist das der Key der Hash-Tabelle bekannt ist.
read table lt_hash into ls_hash with key feld1 = 'T'.

if sy-subrc = 0.
  "performante Operation mit interner Tabelle
else.
  "Füllen Hash Tabelle
endif.

Coding Standard Table

TYPES: BEGIN OF ty_matnr,
         matnr TYPE matnr,
       END OF ty_matnr.

DATA: lt_sort_matnr TYPE SORTED TABLE OF ty_matnr WITH UNIQUE KEY matnr,
      ls_sort_matnr TYPE ty_matnr.

ls_sort_matnr = VALUE #( matnr = '111' ).
insert ls_sort_matnr into table lt_sort_matnr.

ls_sort_matnr = VALUE #( matnr = '234' ).
insert ls_sort_matnr into table lt_sort_matnr.

ls_sort_matnr = VALUE #( matnr = '111' ).
insert ls_sort_matnr into table lt_sort_matnr.

Web-Links