Ansicht
Dokumentation

ABENLINE_INDEX_FUNCTION - LINE INDEX FUNCTION

ABENLINE_INDEX_FUNCTION - LINE INDEX FUNCTION

PERFORM Short Reference   PERFORM Short Reference  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

- line_index

... line_index( table_exp  ) ...

Die eingebaute Tabellenfunktion line_index gibt die Nummer der mit dem Tabellenausdruck table_exp gefundenen Zeile bezüglich des verwendeten Tabellenindex zurück. Der Rückgabewert ist vom Typ i.

Die über den Tabellenausdruck gesuchte Zeile itab_line muss durch eine Schlüsselangabe ermittelt werden. Eine Indexangabe ist nicht erlaubt. Für table_exp können außer einzelnen Tabellenausdrücken auch Verkettungen angegeben werden, deren Resultat eine Zeile einer internen Tabelle ist. Das Ergebnis bezieht sich immer auf die in der letzten eckigen Klammer angegebene Zeile und die Beschränkung auf Schlüsselzugriffe gilt nur für diese eckige Klammer.

Innerhalb von line_index wird die explizite Angabe eines Tabellenschlüssels in der Angabe der Tabellenzeile table_line des Tabellenausdrucks wie die Angabe eines freien Suchschlüssels für diesen Tabellenschlüssel behandelt.

Der verwendete Tabellenindex richtet sich wie folgt nach der Schlüsselangabe:

  • Bei Angabe eines Suchschlüssels ohne explizite Angabe eines Tabellenschlüssels wird die Nummer einer gefundenen Zeile bezüglich des primären Tabellenindex und bei einer Hash-Tabelle der Wert -1 zurück gegeben.
  • Bei expliziter Angabe eines Tabellenschlüssels hinter KEY wird die Nummer einer gefundenen Zeile bezüglich des zugeordneten Tabellenindex zurück gegeben. Falls es sich um einen Hash-Schlüssel handelt, wird der Wert -1 zurück gegeben.

Wenn die gesuchte Zeile nicht gefunden wird, wird keine Ausnahme ausgelöst, sondern immer der Wert 0 zurück gegeben. Bei einer Verkettung von Tabellenausdrücken führt der erste nicht erfolgreiche Zugriff von links zu diesem Wert.

Hinweise

  • Eine Indexangabe in itab_line des Tabellenausdrucks ist hier nicht sinnvoll und deshalb nicht möglich.
  • Der Tabellenausdruck dient nur zum Feststellen der Zeilennummer der angegebenen Zeile. Es wird kein temporäres Resultat erzeugt.
  • Die Tabellenfunktion line_index kann als Kurzform der Anweisung READ TABLE mit dem Zusatz TRANSPORTING NO FIELDS mit nachfolgender Auswertung von sy-tabix verstanden werden. Bei einer nicht gefundenen Zeile wird aber immer 0 zurück gegeben, während sy-tabix nach einer Binärsuche mit READ TABLE den Wert hat, wo die Zeile zu finden wäre.
  • Wenn ein in table_line des Tabellenausdrucks angegebener Suchschlüssel das Anfangsstück eines sekundären Tabellenschlüssel abdeckt, ohne dass dieser explizit hinter KEY angegeben ist, kommt es zu einer durch ein Pragma ausblendbaren Warnung von der Syntaxprüfung, da die Funktion bei expliziter Angabe des Sekundärschlüssels in der Regel performanter ist.
  • Wie bei der sonstigen Verwendung von Tabellenausdrücken muss insbesondere auch bei line_index darauf geachtet werden, keine doppelten Selektionen vorzunehmen. Man sollte in der Regel also nicht erst die Zeilennummer mit line_index feststellen und dann die Zeile gleich darauf über den Index lesen.
  • Um die Existenz einer Zeile festzustellen, kann die Prädikatfunktion line_exists verwendet werden. Aber auch die Tabellenfunktion line_index kann zur Überprüfung der Existenz einer Zeile verwendet werden. Wenn die Zeile gefunden wird, ist das Ergebnis für jede Tabellenart ungleich 0. Eine Überprüfung auf einen Wert größer 0 reicht dagegen nur bei Indextabellen oder bei der Verwendung sortierter Schlüssel aus.

Beispiel

Eine Anwendung der Indexfunktion auf verkettete Tabellenausdrücke kann wie folgt aussehen, wobei auf die geschachtelte interne Tabelle aus dem Beispiel für Verkettungen mit Tabellenausdrücken zugegriffen wird. Der erste Zugriff gibt den Wert 1 für die erste Zeile der innersten Tabelle zurück. Der zweite Zugriff gibt den Wert 0 zurück, da es für den Indexzugriff auf die äußerste Tabelle keine Zeile gibt.

DATA(idx1) = line_index(
               itab[ 2 ][ 2 ][ KEY primary_key table_line = 7 ] ).

DATA(idx2) = line_index(
               itab[ 9 ][ 2 ][ KEY primary_key table_line = 7 ] ).

Interne Tabellen, Indexfunktion






CPI1466 during Backup   BAL Application Log Documentation  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 7637 Date: 20240523 Time: 180126     sap01-206 ( 121 ms )