Ansicht
Dokumentation

ABAPSELECT_UP_TO_OFFSET - SELECT UP TO OFFSET

ABAPSELECT_UP_TO_OFFSET - SELECT UP TO OFFSET

Fill RESBD Structure from EBP Component Structure   Fill RESBD Structure from EBP Component Structure  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

SELECT, UP TO, OFFSET

Kurzreferenz



... $[UP TO n ROWS$]
    $[OFFSET o$] ...

Zusätze:

1.... UP TO n ROWS

2.... OFFSET o

Wirkung

Diese optionalen Zusätze zu einer Query einer SELECT- oder WITH-Anweisung beschränken die Ergebnismenge durch einen Offset und die maximale Anzahl der zu lesenden Zeilen. Die Syntax unterscheidet sich wie folgt für Haupt- und Subqueries:

  • Hauptquery
Wenn die INTO-Klausel als letzte Klausel der SELECT-Anweisung aufgeführt ist, müssen die Zusätze hinter der INTO-Klausel stehen. Ansonsten können sie auch hinter der SELECT-Klausel oder hinter der FROM-Klausel stehen. Die Reihenfolge der beiden Zusätze ist nicht vorgeschrieben. Der Zusatz OFFSET kann nur verwendet werden, wenn es eine ORDER BY-Klausel gibt.
  • Subquery
Der Zusatz UP TO kann nur hinter einer ORDER BY-Klausel und der Zusatz OFFSET nur hinter UP TO angegeben werden.

Hinweis

Die Zusätze wirken auf die Ergebnismenge, die durch die vorhergehenden Klauseln definiert wird.

Zusatz 1

... UP TO n ROWS

Wirkung

Der Zusatz UP TO begrenzt die Anzahl der Zeilen in der Ergebnismenge einer SELECT-Anweisung auf n. Für n wird eine Hostvariable, ein Hostausdruck oder ein Literal vom Typ i erwartet, das alle nicht negativen Zahlen des Wertebereichs von i außer dessen Maximalwert +2.147.483.647 darstellen darf. Für n dürfen nur die Typen b, s, i oder int8 angegeben werden. Weiterhin darf ein für n angegebenes Literal oder eine Konstante nicht den Wert 0 haben. Dies wird im strikten Modus ab Release überprüft. Wenn für n ein untypisiertes Literal oder eine Hostvariable angebene wird, muss sein Inhalt gemäß der Regeln für eine verlustfreie Zuweisung zum Datentyp i passen.

  • Enthält n den Wert 0, werden maximal 2.147.483.647 Zeilen in die Ergebnismenge gestellt.
  • Enthält n eine positive Zahl, gibt diese die maximale Zeilenzahl in der Ergebnismenge an.
  • Enthält n eine negative Zahl oder +2.147.483.647, kommt es zu einem Syntaxfehler oder einer unbehandelbaren Ausnahme.

Der Zusatz UP TO kann nicht zusammen mit dem Zusatz SINGLE und nicht bei Verwendung von UNION, INTERSECT oder EXCEPT verwendet werden.

Hinweise

  • Die Verwendung des Zusatzes UP TO n ROWS ist einer SELECT-Schleife, die nach dem Einlesen von n Zeilen abgebrochen wird, vorzuziehen. Im letzteren Fall enthält das letzte von der Datenbank an den AS ABAP übertragene Paket in der Regel überflüssige Zeilen.
  • Der Zusatz UP TO 1 ROWS liefert ohne den Zusatz ORDER BY das gleiche Ergebnis wie der Zusatz SINGLE und es gibt keine wesentlichen Unterschiede in der Performance.
  • Bei der Verwendung von SINGLE in einen nicht-tabellenartigen Arbeitsbereich eingelesen werden kann, ohne dass eine ENDSELECT abzuschließende Schleife geöffnet wird.

  • Bei der Verwendung von UP TO 1 ROWS kann der Zusatz ORDER BY angegeben werden, um bei mehrzeiliger Treffermenge die erste Zeile zu bestimmen.

Es wird empfohlen, den Zusatz UP TO 1 ROWS zu verwenden, um maximal eine Zeile einer Menge von selektierten Zeilen zu lesen. Der Zusatz SINGLE soll dagegen in aller Regel für das Lesen einer vollständig spezifizierten Zeile eingesetzt werden.
  • Der Zusatz UP TO 1 ROWS wird oft verwendet, um festzustellen, ob eine Datenquelle überhaupt eine Zeile zu einer Bedingung enthält. Um einen unnötigen Transport von Daten ganz zu vermeiden, kann für diesen Zweck aber auch eine SELECT-Liste verwendet werden, die nichts als eine Konstante enthält (siehe ausführbares Beispiel).
  • Wenn gleichzeitig der Zusatz ORDER BY angegeben ist, werden die Zeilen der Treffermenge auf dem Datenbankserver sortiert und nur so viele der sortierten Zeilen in die Ergebnismenge übernommen, wie in n angegeben ist. Wenn der Zusatz ORDER BY nicht angegeben ist, werden n beliebige Zeilen in die Ergebnismenge übernommen, welche die WHERE-Bedingung erfüllen. Wenn die ORDER BY-Klausel die Ergebnismenge nicht eindeutig sortiert, ist nicht definiert, welche Zeilen in der Ergebnismenge stehen.
  • Wenn gleichzeitig der Zusatz FOR ALL ENTRIES angegeben ist, werden alle selektierten Zeilen zunächst in eine interne Tabelle eingelesen und der Zusatz UP TO n ROWS wirkt erst bei der Übergabe von der Systemtabelle an den eigentlichen Zielbereich. Dadurch kann es zu unerwarteten Speicherengpässen kommen.
  • Die Angabe von Hostvariablen ohne Fluchtsymbol @ ist obsolet. In den strikten Modi der Syntaxprüfung ab Release muss das Fluchtsymbol @ angegeben werden.

Beispiel

Auslesen der 3 Geschäftskunden mit den höchsten Rabattsätzen:

Zusatz 2

... OFFSET o

Wirkung

Mit dem Zusatz OFFSET werden aus der Ergebnismenge nur die Zeilen hinter der Zeile mit der Zählung o zurückgegeben. Wenn OFFSET angegeben ist, muss die Ergebnismenge mit ORDER BY sortiert werden. Für o darf eine Hostvariable, ein Hostausdruck oder ein Literal vom Typ b, s, i oder int8 angegeben werden, das alle nicht negativen Zahlen des Wertebereichs von i außer dessen Maximalwert +2.147.483.647 darstellen darf. Ein für n angegebenes Literal oder eine Konstante darf nicht den Wert 0 haben.

  • Enthält o den Wert 0, werden alle Zeilen ab der ersten Zeile berücksichtigt.
  • Enthält o eine positive Zahl, werden nur die Zeilen hinter der durch o bezeichneten Zeile berücksichtigt.
  • Enthält o eine negative Zahl oder +2.147.483.647, kommt es zu einem Syntaxfehler oder einer unbehandelbaren Ausnahme.

Der Zusatz OFFSET kann nicht zusammen mit den Zusätzen SINGLE und FOR ALL ENTRIES und nicht bei Verwendung von UNION, INTERSECT oder EXCEPT und nicht beim Zugriff auf DDIC-Projektions-Views verwendet werden.

Hinweise

  • Die Angabe des Zusatzes OFFSET ist nur sinnvoll, wenn die Reihenfolge der Zeilen der Ergebnismenge nicht undefiniert ist. Deshalb muss auch ORDER BY angegeben werden. Hinter ORDER BY sollten entsprechend sinnvolle Spaltenangaben gemacht werden.
  • Bei Verwendung des Zusatzes OFFSET wird die Syntaxprüfung in einem strikten Modus ausgeführt, welche die Anweisung strenger behandelt als die normale Syntaxprüfung.

Beispiel

Die Daten aller Flüge einer Verbindung werden ausgelesen, ausgenommen der zehn Flüge mit den wenigsten belegten Plätzen.

Begrenzung der Ergebnismenge






RFUMSV00 - Advance Return for Tax on Sales/Purchases   CL_GUI_FRONTEND_SERVICES - Frontend Services  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 11630 Date: 20240523 Time: 124834     sap01-206 ( 181 ms )