SAP NetWeaver AS ABAP Release 750, ©Copyright 2016 SAP AG. Alle Rechte vorbehalten.
ABAP - Schlüsselwortdokumentation →
ABAP - Referenz →
Externe Daten verarbeiten →
ABAP-Datenbankzugriffe →
Open SQL →
Open SQL - Lesende Zugriffe →
SELECT →
SELECT - additional_options
Kurzreferenz
Syntax
... [UP TO n ROWS]
[BYPASSING BUFFER]
[CONNECTION con|(con_syntax)] ...
Zusätze:
1.... UP TO n ROWS
2.... BYPASSING BUFFER
3.... CONNECTION con|(con_syntax)
Wirkung
Diese optionalen Zusätze der Anweisung SELECT bestimmen die maximale Anzahl der zu lesenden Zeilen, legen fest, ob die
SAP-Pufferung umgangen wird, und definieren die
Datenbankverbindung.
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-Liste
oder hinter der FROM-Klausel stehen.
Zusatz 1
... UP TO n ROWS
Wirkung
Dieser Zusatz begrenzt die Anzahl der Zeilen in der Ergebnismenge einer SELECT-Anweisung. Für n wird eine
Hostvariable, ein
Hostausdruck oder ein Literal vom Typ
i erwartet, die alle nicht negativen Zahlen des Wertebereichs außer dessen Maximalwert
+2.147.483.647 darstellen dürfen. Einer Hostvariable soll das Fluchtsymbol @ vorangestellt werden. Der Inhalt von n muss gemäß der Regeln für eine
verlustfreie Zuweisung zum Datentyp i passen.
Enthält n eine positive Zahl, gibt diese die maximale Zeilenzahl in
der Ergebnismenge an. Enthält n den Wert 0, werden maximal 2.147.483.647
Zeilen in die Ergebnismenge gestellt. 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 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 Applikationsserver ü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 kann in einen nicht-tabellenartigen Arbeitsbereich
eingelesen werden, 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 zu lesen, während der Zusatz
SINGLE in aller Regel für das Lesen einer vollständig spezifizierten Zeile eingesetzt werden soll.
-
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 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 gleichzeitig der Zusatz FOR
ALL ENTRIES angegeben ist, werden alle selektierten Zeilen zunächst in eine interne
Systemtabelle 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.
-
Der Zusatz UP TO n ROWS kann nicht zusammen mit UNION verwendet werden.
-
Die Angabe von Hostvariablen ohne Fluchtsymbol @ ist
obsolet. In den
strikten Modi der Syntaxprüfung ab Release 7.40, SP05 muss das Fluchtsymbol @ angegeben werden.
Beispiel
Auslesen der 3 Geschäftskunden mit den höchsten Rabattsätzen:
DATA: wa_scustom TYPE scustom.
SELECT *
FROM scustom
WHERE custtype = 'B'
ORDER BY discount DESCENDING
INTO @wa_scustom
UP TO 3 ROWS.
ENDSELECT.
Zusatz 2
... BYPASSING BUFFER
Wirkung
Dieser Zusatz bewirkt, dass die SELECT-Anweisung die
SAP-Pufferung umgeht und direkt aus der Datenbank, nicht aber aus dem Puffer auf dem
Applikationsserver liest.
Zusatz 3
... CONNECTION con|(con_syntax)
Wirkung
Der Open SQL-Befehl wird nicht auf der Standard-Datenbankverbindung, sondern auf der angegebenen
sekundären Datenbankverbindung ausgeführt. Die Datenbankverbindung kann wie folgt angegeben werden
-
Direkte statische Angabe als con.
-
Angabe als Inhalt eines eingeklammerten Datenobjekts con_syntax vom Typ
c oder string. Es können folgende Angaben für con_syntax unterschieden werden:
- Literal oder Konstante
Wenn das Datenobjekt con_syntax als Zeichenliteral
oder als Konstante angegeben ist, kann es statisch ausgewertet werden und die Datenbankverbindung wird als verwendetes Objekt erkannt.
- Variable
Wenn das Datenobjekt con_syntax als Variable angegeben ist, ist dies eine rein dynamische Angabe und es findet keine statische Auswertung des Inhalts statt.
Die Datenbankverbindung muss mit einem Namen angegeben werden, der in der Tabelle DBCON
in der Spalte CON_NAME enthalten ist oder mit dem Präfix R/3* beginnt und damit für eine
Service-Verbindung zur Standard-Datenbank steht.
Die Angabe der Datenbankverbindung wird sowohl bei statischer als auch bei dynamischer Angabe erst zur
Laufzeit ausgewertet und eine unbekannte Datenbankverbindung führt zum Laufzeitfehler DBSQL_UNKNOWN_CONNECTION.
Die in der aktuellen Open-SQL-Anweisung angegebenen Datenbanktabellen oder Views müssen unabhängig
von der angegebenen Datenbankverbindung aktiv im ABAP Dictionary des aktuellen AS ABAP vorhanden sein. Als Datenbanktabellen können nur
transparente Tabellen angegeben werden.
Pool- und
Cluster-Tabellen können
nicht zusammen mit dem Zusatz CONNECTION angegeben werden. In der sekundären
Datenbank muss es für jede in der aktuellen Open-SQL-Anweisung angegeben Datenbanktabelle oder
View ein gleichnamiges entsprechend verwendbares Objekt mit passender Struktur geben, sonst kommt es zu einer Ausnahme.
Hinweise
-
Die Einträge der Datenbanktabelle DBCON können mit dem Werkzeug
DBA Cockpit (Transaktionscode
DBACOCKPIT) angezeigt, angelegt und geändert werden. Andere Zugriffe auf DBCON sollten nicht erfolgen. Insbesondere kann die Tabelle DBCON nicht mit dem Werkzeug
Data Browser angezeigt
werden. Wenn in einem System das Werkzeug DBA Cockpit nicht funktionieren sollte, kann auch auf die
Transaktion DBCO zuück gegriffen werden, wofür aber spezielle Kenntnisse erforderlich sind.
-
Über sekundäre Datenbankverbindungen kann auf alle
Views zugegriffen werden, auf die mit Open SQL zugegriffen werden kann, d.h.
Datenbank-Views,
Projektions-Views,
externe Views und
CDS-Entitäten sowie
CDS-Tabellenfunktionen. CDS-Views sollen über den Namen der
CDS-Entität angegeben werden, da der Zugriff über den Namen der
CDS-Datenbank-View zwar möglich, aber obsolet ist.
-
Die Art eines in der Open-SQL-Anweisung angegebenen Datenbankobjekts muss nicht unbedingt mit der Art
des gleichnamigen Datenbankobjekts der sekundären Datenbank übereinstimmen. Beispielsweise
kann über die Angabe einer Datenbanktabelle auf eine gleichnamige View der sekundären Datenbank zugegriffen werden und umgekehrt, wenn diese die gleiche Struktur haben.
-
Der Zusatz CONNECTION darf nicht zusammen mit dem Zusatz WITH
HOLD der Anweisung OPEN CURSOR verwendet werden.
Beispiel
Auslesen von Daten über eine Service-Verbindung zur Standard-Datenbank.
SELECT *
FROM scarr
INTO TABLE @DATA(itab)
CONNECTION r/3*my_conn.
cl_demo_output=>display( itab ).