Ansicht
Dokumentation

ABAPSELECT_CLAUSE_LINES - SELECT CLAUSE LINES

ABAPSELECT_CLAUSE_LINES - SELECT CLAUSE LINES

ROGBILLS - Synchronize billing plans   SUBST_MERGE_LIST - merge external lists to one complete list with #if... logic for R3up  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

SELECT - lines

Kurzreferenz



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:

... FOR UPDATE

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 )