Ansicht
Dokumentation
ABAPSELECT_CLAUSE_LINES - SELECT CLAUSE LINES
ROGBILLS - Synchronize billing plans SUBST_MERGE_LIST - merge external lists to one complete list with #if... logic for R3upDiese Dokumentation steht unter dem Copyright der SAP AG.
SELECT - lines
Syntax
... { SINGLE [FOR UPDATE] }
| { [DISTINCT] { } } ...
Alternativen:
1. ... SINGLE [FOR UPDATE]
2. ... [DISTINCT] { }
Wirkung
Die Angaben in lines legen fest, dass die Ergebnismenge entweder einzeilig oder mehrzeilig ist.
Alternative 1
... SINGLE [FOR UPDATE]
Zusatz:
Wirkung
Falls SINGLE angegeben ist, ist die Ergebnismenge einzeilig. Falls die übrigen Zusätze
der Anweisung SELECT mehr als eine Zeile auf der Datenbank selektieren, wird die erste gefundene
Zeile in die Ergebnismenge gestellt. Die hinter INTO
angegebenen Datenobjekte dürfen keine internen Tabellen sein bzw. der Zusatz APPENDING
kann nicht verwendet werden. Der Zusatz ORDER BY kann ebenfalls nicht verwendet werden.
Hinweise
-
Bei der Angabe von SINGLE sollte die zu lesende Zeile aus Effizienzgründen eindeutig in
der WHERE-Bedingung spezifiziert sein. Beim Lesen aus einer Datenbanktabelle geschieht dies durch die Angabe von Vergleichswerten für den
Primärschlüssel.
-
In einer Subquery ist der Zusatz SINGLE nicht erlaubt.
-
Wenn bei der Angabe von SINGLE in der INTO-Klausel
LOB-Handles erzeugt werden, müssen
in der WHERE-Bedingung alle Primärschlüsselfelder
in mit AND verknüpften logischen Ausdrücken auf Gleichheit überprüft
werden. Falls dies nicht möglich ist, kann statt SINGLE der Zusatz UP TO 1 ROWS verwendet werden.
-
Bei Verwendung des Zusatzes SINGLE bleiben nach einer
Erzeugung von LOB-Handles neben den
Lokatoren auch alle
Leseströme die bei Ausführung
der SELECT-Anweisung erzeugt werden, solange bestehen, bis sie explizit mit einer ihrer Methoden
oder implizit am Ende der aktuellen Datenbank-LUW geschlossen werden. In dieser Zeit ist die zugehörige
Datenbankoperation nicht abgeschlossen. Es wird empfohlen, alle LOB-Handles so früh wie möglich explizit zu schließen.
Beispiel
Auslesen aus der Datenbanktabelle SPFLI der Zeile mit den Angaben zum Lufthansa-Flug 0400.
DATA wa TYPE spfli.
SELECT SINGLE *
FROM spfli
WHERE carrid = 'LH' AND
connid = '0400'
INTO CORRESPONDING FIELDS OF @wa.
Zusatz
... FOR UPDATE
Wirkung
Der Zusatz FOR UPDATE setzt beim Lesen einer einzelnen Zeile mit SINGLE eine
Schreibsperre
für diese Zeile auf der Datenbank. Die SELECT-Anweisung wird in diesem Fall nur dann ausgeführt,
wenn in der WHERE-Bedingung alle Primärschlüsselfelder
in mit AND verknüpften logischen Ausdrücken auf Gleichheit überprüft werden. Andernfalls ist die Ergebnismenge leer und sy-subrc wird auf 8 gesetzt. Falls das Setzen der Sperre zu einem
Deadlock führt, kommt es zu einer Ausnahme. Bei Verwendung des Zusatzes FOR UPDATE umgeht die SELECT-Anweisung die
SAP-Pufferung.
Alternative 2
... [DISTINCT] { }
Wirkung
Falls SINGLE nicht angegeben ist und in der SELECT-Liste select_list nicht ausschließlich Aggregatausdrücke angegeben sind, ist die Ergebnismenge mehrzeilig. Es werden alle Zeilen der Datenbank in die Ergebnismenge gestellt, die von den übrigen Zusätzen der Anweisung SELECT selektiert werden. Ohne Verwendung des Zusatzes ORDER BY ist die Reihenfolge der Zeilen in der Ergebnismenge nicht definiert und kann bei mehrfacher Ausführung der gleichen SELECT-Anweisung verschieden sein. Ein hinter INTO angegebenes Datenobjekt kann eine interne Tabelle sein und der Zusatz APPENDING kann verwendet werden. Falls hinter INTO bzw. APPENDING keine interne Tabelle angegeben ist, leitet die SELECT-Anweisung eine Schleife ein, die mit ENDSELECT abgeschlossen werden muss.
Beim Lesen mehrerer Zeilen ohne SINGLE können mit dem Zusatz DISTINCT doppelt vorkommende Zeilen aus der Ergebnismenge ausgeschlossen werden. Bei Verwendung des Zusatzes DISTINCT umgeht die SELECT-Anweisung die SAP-Pufferung. Der Zusatz DISTINCT kann nicht angegeben werden,
-
wenn eine in der SELECT-Liste select_list angegebene Spalte vom Typ STRING, RAWSTRING, LCHR oder LRAW ist,
-
wenn auf Pool- oder
Cluster-Tabellen zugegriffen wird und in der SELECT-Liste select_list einzelne Spalten angegeben sind.
Hinweise
Bei der Angabe von DISTINCT ist zu beachten, dass dafür Sortierungen im Datenbanksystem ausgeführt werden müssen und dass die SELECT-Anweisung deshalb die
SAP-Pufferung umgeht.
Beispiel
Ausgabe aller Flugziele, welche die Lufthansa von Frankfurt aus anfliegt.
DATA destinations TYPE TABLE OF spfli-cityto WITH EMPTY KEY.
SELECT DISTINCT cityto
FROM spfli
WHERE carrid = 'LH' AND
cityfrom = 'FRANKFURT'
INTO TABLE @destinations.
cl_demo_output=>display_data( destinations ).
RFUMSV00 - Advance Return for Tax on Sales/Purchases Vendor Master (General Section)
Diese Dokumentation steht unter dem Copyright der SAP AG.
Length: 8928 Date: 20240523 Time: 134831 sap01-206 ( 133 ms )