Die Tabellenfunktion line_index gibt die Nummer der mit dem
Tabellenausdrucktable_exp gefundenen Zeile bezüglich des verwendeten
Tabellenindex zurück. Der Rückgabewert ist vom Typ i.
Die über den Tabellenausdruck zu suchende Zeile
itab_line muss über eine Schlüsselangabe festgelegt werden. Eine Indexangabe
ist nicht erlaubt. Für table_exp können außer einzelnen Tabellenausdrücken auch alle
Verkettungen angegeben werden, deren Resultat
eine Zeile einer internen Tabelle ist, d.h. die mit einer eckigen Klammer enden. 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ädikatfunktionline_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.