ABAPFROM_CLAUSE - FROM CLAUSE
Fill RESBD Structure from EBP Component Structure BAL Application Log DocumentationDiese Dokumentation steht unter dem Copyright der SAP AG.
SELECT - source
Syntax
... FROM { {dbtab [AS tabalias]}
| join
| {(dbtab_syntax) [AS tabalias]} }
[UP TO n ROWS]
[CLIENT SPECIFIED]
[BYPASSING BUFFER]
[CONNECTION {con|(con_syntax)}] ... .
Alternativen:
1. ... dbtab [AS tabalias]
2. ... join
3. ... (dbtab_syntax) [AS tabalias]
Zusätze:
1.... UP TO n ROWS
2.... CLIENT SPECIFIED
3.... BYPASSING BUFFER
Wirkung
Die Angaben in source legen fest, ob auf eineDatenbanktabelle oder einenView oder ob auf mehrere Datenbanktabellen bzw. Views in einemJoin-Ausdruck zugegriffen wird. Optionale Zusätze regeln dieMandantenbehandlung, ob dieSAP-Pufferung umgangen wird, und die maximale Anzahl der zu lesenden Zeilen.
Alternative 1
... dbtab [AS tabalias]
Wirkung
Für dbtab kann eine im ABAP Dictionary definierte Datenbanktabelle oder ein im ABAP Dictionarydefinierter View angegeben werden. Mit dem Zusatz AS kann man der Datenbanktabelle bzw. dem Vieweinen alternativen Tabellennamen tabalias zuweisen, der nur während der SELECT-Anweisunggültig ist und dann an allen anderen Stellen statt des tatsächlichen Namens verwendet werden muss.
Hinweis
Wenn eine Datenbanktabelle oder ein View mehrfach hinter FROM in einem Join-Ausdruck aufgeführt wird, ist der alternative Name notwendig, um Doppeldeutigkeiten zu vermeiden.
Beispiel
Lesen aus der Datenbanktabelle spfli und Vergabe des alternativen Namens s. Im vorliegendenFall könnte die Angabe des Präfixes s~ hinter ORDER BY auch entfallen,da nur eine Datenbanktabelle ausgelesen wird und die Spalte carrid eindeutig ist. Das Präfix spfli~ kann bei Vergabe des alternativen Namens nicht mehr verwendet werden.
DATA wa TYPE spfli.
SELECT *
FROM spfli AS s
INTO wa
ORDER BY s~carrid.
WRITE: / wa-carrid, wa-connid.
ENDSELECT.
Alternative 2
... join
Wirkung
Angabe eines Join-Ausdrucks, der mehrere Datenbanktabellen bzw. Views miteinander verknüpft.
Alternative 3
... (dbtab_syntax) [AS tabalias]
Wirkung
Statt der statischen Angaben kann ein eingeklammertes Datenobjekt dbtab_syntax angegeben werden,das bei Ausführung der Anweisung die bei den statischen Angaben gezeigte Syntax enthalten muss. Das Datenobjekt dbtab_syntax kann ein zeichenartiges Datenobjekt oder eineStandardtabelle ohnesekundäreTabellenschlüssel mit zeichenartigem Zeilentyp sein. Die Syntax in dbtab_syntax istwie im ABAP Editor unabhängig von Groß- und Kleinschreibung. Bei der Angabe einer internen Tabelle kann die Syntax auf mehrere Zeilen verteilt sein.
Der Zusatz AS kann nur dann angegeben werden, wenn dbtab_syntax ausschließlichden Namen einer einzelnen Datenbanktabelle bzw. eines Views enthält, und hat für diese Datenbanktabelle bzw. den View die gleiche Bedeutung wie bei der statischen Angabe.
Bei der Angabe der Syntax in dbtab_syntax gelten folgende Einschränkungen:
- In einer Join-Bedingung kann hinter dem Zusatz IN nur eine Liste von Feldern, aber keineSelektionstabelle angegeben werden.
- In einem Join-Ausdruck darf keine Datenbanktabelle verwendet werden, die Spalten vom Typ RAWSTRING, SSTRING oder STRING hat.
Hinweis
Falls dbtab_syntax eine interne Tabelle mitKopfzeile ist, wird die Kopfzeile, nicht derTabellenkörper ausgewertet.
Beispiel
Ausgabe der Flugverbindungen (Flugdatum, Namen der Fluggesellschaft und Flugnummer) zu der Benutzereingabe von einem Abflugort und einem Zielort. Die innerenJoins werden dynamisch zur Laufzeit aufgebaut. Auch die Spaltenangabe hinter SELECT ist dynamisch.
PARAMETERS: p_cityfr TYPE spfli-cityfrom,
p_cityto TYPE spfli-cityto.
DATA: BEGIN OF wa,
fldate TYPE sflight-fldate,
carrname TYPE scarr-carrname,
connid TYPE spfli-connid,
END OF wa.
DATA itab LIKE SORTED TABLE OF wa
WITH UNIQUE KEY fldate carrname connid.
DATA: column_syntax TYPE string,
dbtab_syntax TYPE string.
column_syntax = `c~carrname p~connid f~fldate`.
dbtab_syntax = `( ( scarr AS c `
& ` INNER JOIN spfli AS p ON p~carrid = c~carrid`
& ` AND p~cityfrom = p_cityfr`
& ` AND p~cityto = p_cityto )`
& ` INNER JOIN sflight AS f ON f~carrid = p~carrid `
& ` AND f~connid = p~connid )`.
SELECT (column_syntax)
FROM (dbtab_syntax)
INTO CORRESPONDING FIELDS OF TABLE itab.
LOOP AT itab INTO wa.
WRITE: / wa-fldate, wa-carrname, wa-connid.
ENDLOOP.
Beispiel
Siehe SELECT, dynamische Token-Angabe
Zusatz 1
... UP TO n ROWS
Wirkung
Dieser Zusatz begrenzt die Anzahl der Zeilen in der Ergebnismenge. Für n wird ein Datenobjektvom Typ i erwartet. Enthält n eine positive Zahl, gibt diese die maximale Zeilenzahlin der Ergebnismenge an. Enthält n den Wert 0, werden alle selektierten Zeilen in die Ergebnismenge gestellt. Enthält n eine negative Zahl, kommt es zu einer unbehandelbaren Ausnahme.
Hinweise
- Die Verwendung des Zusatzes UP TO n ROWS ist einer SELECT-Schleife, die nach dem Einlesenvon n Zeilen abgebrochen wird, vorzuziehen. Im letzteren Fall enthält das letzte von der Datenbank an den Applikationsserver übertragenenPaket in der Regel überflüssige Zeilen.
- Wenn gleichzeitig der Zusatz ORDERBY angegeben ist, werden die Zeilen der Treffermenge auf dem Datenbankserver sortiert und nurso 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 FORALL ENTRIES angegeben ist, werden alle selektierten Zeilen zunächst in eine interne Systemtabelleeingelesen 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.
Beispiel
Auslesen der 3 Geschäftskunden mit den höchsten Rabattsätzen:
DATA: wa_scustom TYPE scustom.
SELECT *
FROM scustom UP TO 3 ROWS
INTO wa_scustom
WHERE custtype = 'B'
ORDER BY discount DESCENDING.
ENDSELECT.
Zusatz 2
... CLIENT SPECIFIED
Wirkung
Dieser Zusatz schaltet die automatische Mandantenbehandlung von Open SQL ab. Bei der Angabe einer einzelnen Datenbanktabelle bzw. eineseinzelnen View muss er direkt hinter dbtab, bei Angabe eines Join-Ausdrucks hinter dem letzten Zusatz ON der Join-Bedingung stehen.
Bei Verwendung des Zusatzes CLIENT SPECIFIED kann die erste Spalte mandantenabhängiger Datenbanktabellen in der WHERE-Bedingung zur Bestimmung derMandantenkennungangegeben und im Zusatz ORDER BY kann explizit nach der Mandantenkennung sortiert werden.
Hinweise
- Wenn der Zusatz CLIENT SPECIFIED angegeben ist, wird die Mandantenspalte wie jede andere Spalteder Tabelle behandelt. Wenn die Mandantenkennung nicht in der WHERE-Bedingung angegeben ist, wird über alle Mandanten selektiert.
- Wird der Zusatz CLIENT SPECIFIED angegeben, ohne dass die Mandantenkennung in der WHERE-Bedingung angegeben ist, umgeht die SELECT-Anweisung dieSAP-Pufferung.
- Da jeder Mandant eine in sich abgeschlossene Einheit darstellt, sollte die automatische Mandantenbehandlung in Anwendungsprogrammen nie abgeschaltet werden. Auf Systemen mitMultitenancy wird dies von der ABAP-Laufzeitumgebung zugesichert.
Beispiel
Auslesen aller Kunden im Mandanten "800".
DATA wa_scustom TYPE scustom.
SELECT *
FROM scustom CLIENT SPECIFIED
INTO wa_scustom
WHERE mandt = '800'.
ENDSELECT.
Zusatz 3
... BYPASSING BUFFER
Wirkung
Dieser Zusatz bewirkt, dass die SELECT-Anweisung dieSAP-Pufferung umgeht und direkt aus der Datenbank, nicht aber aus dem Puffer auf demApplikationsserver liest.
General Material Data BAL_S_LOG - Application Log: Log header data
Diese Dokumentation steht unter dem Copyright der SAP AG.
Length: 14146 Date: 20120526 Time: 201341 triton ( 448 ms )






