ABAPINTO_CLAUSE - INTO CLAUSE

ABAP Short Reference   BAL Application Log Documentation  
Diese Dokumentation steht unter dem Copyright der SAP AG.

SELECT - target

Kurzreferenz



Syntax

... { INTO
      { {[CORRESPONDING FIELDS OF] wa}|(dobj1, dobj2, ...)} }
  | { INTO|APPENDING
         [CORRESPONDING FIELDS OF] TABLE itab [PACKAGE SIZE n] }
    [ creating ] ...  .

Alternativen:

1. ... INTO [CORRESPONDING FIELDS OF] wa

2. ... INTO (dobj1, dobj2, ... )

3. ... INTO|APPENDING [CORRESPONDING FIELDS OF] TABLE itab [PACKAGE SIZE n]

Wirkung

Die Angaben in target legen fest, welchen Datenobjekten dieErgebnismenge einerSELECT- oder FETCH-Anweisungzugewiesen wird. Es können entweder ein einzelner Arbeitsbereich wa oder eine Liste vonDatenobjekten dobj1, dobj2 ... hinter INTO oder eine interne Tabelle itab hinter INTO oder APPENDING angegeben werden.

Wenn in target ein LOB der Ergebnismenge mit einemLOB-Handleverknüpft wird, muss eventuell mit creating festgelegt werden, ob es sich um einenDatenstrom oder einenLokator handelt.

Hinweise

  • Für die Angabe der Datenobjekte gibt es keine den anderen Zusätzen entsprechende dynamischeVariante. Stattdessen kann mit dynamisch erzeugten Datenobjekten gearbeitet werden (siehe das Beispiel zu CREATE DATA).
  • Für die Anweisung SELECT gibt es noch eine obsoleteKurzform, in welcher die Angabe von INTO oder APPENDING weggelassen werden kann.
  • Hinter der Anweisung FETCH können derzeit (Release 7.1, EhP1) noch keine Referenzvariablen für LOB-Handles bzw. LOB-Handle-Strukturen angegeben werden.


Alternative 1

... INTO [CORRESPONDING FIELDS OF] wa


Wirkung

Für wa kann ein Datenobjekt angegeben werden, das ohne die Angabe von CORRESPONDING FIELDS OF bestimmtenVoraussetzungen genügenmuss. Wenn die Ergebnismenge einzeilig ist, wird diese Zeile wa zugewiesen. Ist die Ergebnismengemehrzeilig, muss hinter SELECT eine ENDSELECT-Anweisung folgen und die Ergebnismenge wirdzeilenweise an den Arbeitsbereich wa zugewiesen und kann in der Schleife ausgewertet werden.Hinter ENDSELECT enthält der Arbeitsbereich wa die zuletzt zugewiesene Zeile. BeiVerwendung in der Anweisung FETCHwird eine Zeile an der aktuellen Cursor-Position entnommen. Ist die Ergebnismenge leer, bleibt der Arbeitsbereich unverändert.

Die Zuweisung der Zeilen der Ergebnismenge richtet sich wie folgt nach der Angabe der Spalten hinter SELECT:

Angabe von * ohne Zusatz CORRESPONDING FIELDS

Wenn mit * alle Spalten gelesen werden und CORRESPONDING FIELDS nicht angegeben ist, verhält sich SELECT wie folgt:

  • Bei der Angabe eines Arbeitsbereichs, der keine Referenzvariablen fürLOB-Handlesenthält, wird die Zeile der Ergebnismenge linksbündig und unkonvertiert gemäßder Struktur der Ergebnismenge zugewiesen. Nicht betroffene Teile von wa behalten ihren vorherigenInhalt. Um nach der Zuweisung typgerecht auf die Komponenten der Ergebnismenge zugreifen zu können, muss der Arbeitsbereich wa wie die Ergebnismenge strukturiert sein.
  • Bei der Angabe einer LOB-Handle-Struktur muss diese gemäß denVoraussetzungen genau wie die Struktur der Datenbanktabelle aufgebaut sein. Die Inhalte der Spalten der Ergebnismenge, denen keineLOB-Handle-Komponentezugeordnet sind, werden direkt den entsprechenden Komponenten des Arbeitsbereichs zugewiesen. Für jede LOB-Handle-Komponente wird ein LOB-Handle erzeugt.

Alle übrigen Kombinationen

Besteht die Ergebnismenge aus einer einzigen explizit hinter SELECT angegebenen Spalte bzw. einem einzigenAggregatausdruck,kann wa ein elementares Datenobjekt oder eine Struktur sein. Wenn die Ergebnismenge aus mehreren Spalten besteht, muss sie eine Struktur sein und es gilt Folgendes:

  • Ist der Zusatz CORRESPONDING FIELDS nicht angegeben, muss wa genügend viele Komponentenenthalten und die Inhalte der Spalten werden in der hinter SELECT angegebenen Reihenfolge von links nach rechts den Komponenten von wa zugewiesen.
  • Ist der Zusatz CORRESPONDING FIELDS angegeben, werden nur die Inhalte von Spalten, fürdie es namensgleiche Komponenten in wa gibt, diesen zugewiesen. Dabei werden die alternativenSpaltennamen berücksichtigt. Mehrfach auftretende Spalten und Aggregatausdrücke könnenbei Angabe von CORRESPONDING FIELDS nur über alternative Spaltennamen zugewiesen werden.Tritt ein Spaltenname mehrfach auf, ohne dass alternative Spaltennamen vergeben wurden, wird die letzte aufgeführte Spalte zugewiesen.

Für die einzelnen Zuweisungen gelten die Zuweisungsregeln. Wenn dabei einLOB einer Referenzvariable fürLOB-Handles zugewiesen wird, wird einLOB-Handle erzeugt.

Hinweise

  • Beim Zusatz CORRESPONDING FIELDS werden Namen, die nur mit dem Zusatz AS name der AnweisungINCLUDE oderbeim Einbinden von Strukturen im ABAP Dictionary definiert wurden, nicht berücksichtigt. Einemit dem Zusatz RENAMING WITH SUFFIX der Anweisung INCLUDE oder analog im ABAP Dictionary umbenannte Komponente wird dagegen berücksichtigt.
  • Beim Zusatz CORRESPONDING FIELDS wird die Zuordnung der gleichnamigen Felder zur Laufzeit einmal pro SELECT-Anweisung bestimmt.


Beispiel

Einlesen von vier Spalten der Ergebnismenge in vier jeweils namensgleiche Komponenten eines Arbeitsbereichs.

DATA wa TYPE spfli.

SELECT carrid connid cityfrom cityto
       FROM spfli
       INTO CORRESPONDING FIELDS OF wa.
  WRITE: / wa-carrid, wa-connid, wa-cityfrom, wa-cityto.
ENDSELECT.

Alternative 2

... INTO (dobj1, dobj2, ... )


Wirkung

Besteht die Ergebnismenge aus mehreren explizit hinter SELECT angegebenen Spalten bzw.Aggregatausdrücken,kann hinter INTO eine eingeklammerte und durch Kommata getrennte Liste von elementaren Datenobjektendobj1, dobj2, ... angegeben werden. Es müssen genauso viele Datenobjekte dobj angegebenwerden, wie die Ergebnismenge Spalten enthält. Der Inhalt der Spalten in der Ergebnismenge wirdgemäß der hinter SELECT festgelegten Reihenfolge von links nach rechts den Datenobjekten zugewiesen. Die einzelnen Zuweisungen erfolgen nach denZuweisungsregeln. Wenn dabei einLOB einer Referenzvariable fürLOB-Handles zugewiesen wird, wird einLOB-Handle erzeugt. Ist die Ergebnismenge leer, bleiben die Datenobjekte unverändert.

Wenn die Ergebnismenge einzeilig ist, werden die Spalten dieser Zeile zugewiesen. Bei einer mehrzeiligenErgebnismenge muss hinter SELECT eine ENDSELECT-Anweisung folgen und die Spalten der Ergebnismengewerden zeilenweise den Datenobjekten zugewiesen und können in der Schleife ausgewertet werden.Bei Verwendung in der Anweisung FETCH werden die Spalten der Zeile an der aktuellen Cursor-Position entnommen.

Beispiel

Einlesen von vier Spalten der Ergebnismenge in vier einzeln angegebene Komponenten einer Struktur. Im Vergleich zum vorhergehenden Beispiel entfällt hier der Namensvergleich durch die Laufzeitumgebung.

DATA wa TYPE spfli.

SELECT carrid connid cityfrom cityto
       FROM spfli
       INTO (wa-carrid, wa-connid, wa-cityfrom, wa-cityto).
  WRITE: / wa-carrid, wa-connid, wa-cityfrom, wa-cityto.
ENDSELECT.

Alternative 3

... INTO|APPENDING [CORRESPONDING FIELDS OF] TABLE itab [PACKAGE SIZE n]


Zusatz:

... PACKAGE SIZE n

Wirkung

Wenn die Ergebnismenge mehrzeilig ist, kann hinter INTO oder hinter APPENDING eine interne Tabelle itab beliebiger Tabellenart angegeben werden, deren Zeilentyp denVoraussetzungen genügt.

Die Ergebnismenge wird Zeile für Zeile in die interne Tabelle itab eingefügt, wobei bei einersortiertenTabelle eine Sortierung vorgenommen wird. Bei Verwendung von INTO wird die interne Tabelle initialisiert. Bei Angabe von APPENDING bleiben die vorhergehenden Zeilen erhalten.

Vor jeder Zuweisung einer Zeile der Ergebnismenge wird eine initiale Zeile der internen Tabelle itaberzeugt und dieser wird die Zeile der Ergebnismenge zugewiesen. Für die Zuweisung einer Zeileder Ergebnismenge an eine Zeile der internen Tabelle mit und ohne CORRESPONDING FIELDS geltendie gleichen Regeln wie bei der Zuweisung an einen einzelnen Arbeitsbereich wa (siehe oben) mit der Ausnahme, dass beim Einfügen in interne TabellenLOB-Handles zwar alsLokatoren aber nicht alsLeseströmeerzeugt werden können.

Fehlt der Zusatz PACKAGE SIZE, werden alle Zeilen der Ergebnismenge in die interne Tabelle itab eingefügt und die Anweisung ENDSELECT darf nicht hinter SELECT angegeben werden.

Ist die Ergebnismenge leer, wird die interne Tabelle bei Verwendung von INTO initialisiert und bleibt bei Verwendung von APPENDING unverändert.

Hinweise

  • Bei der Angabe einer internen Tabelle mit eindeutigemprimären odersekundärenTabellenschlüssel kommt es zu einer unbehandelbaren Ausnahme, wenn versucht wird, einen doppelten Eintrag zu erzeugen.
  • Wenn die interne Tabelle bei Verwendung des Zusatzes CORRESPONDING FIELDS mehr Spalten als benötigtenthält, wird in der Regel zuviel Speicher durch initiale Felder belegt und es kommt zu einerWarnung von der Syntaxprüfung. In Fällen, in denen die Spalten benötigt werden, z.B. um sie im Programm mit abgeleiteten Werten zu befüllen, kann die Warnung mit einemPragma umgangen werden.
  • Da die maximale Anzahl von Datenströmen, die einer Open-SQL-Anweisung zugeordnet sein kann, auf 16 begrenzt ist, hätte es keinen Sinn, beim Einlesen von internen Tabellen Leseströme zu erzeugen.


Zusatz

... PACKAGE SIZE n

Wirkung

Durch Angabe des Zusatzes PACKAGE SIZE werden die Zeilen der Ergebnismenge bei SELECTin einer Schleife verarbeitet, die mit ENDSELECT abgeschlossen werden muss. Sie werden in Paketenvon n Zeilen in die interne Tabelle itab eingefügt. Für n wird einDatenobjekt vom Typ i erwartet, das die Anzahl der Zeilen enthält. Falls der Inhalt vonn kleiner 0 ist, kommt es zu einer unbehandelbaren Ausnahme. Falls der Inhalt von n gleich0 ist, werden alle Zeilen der Ergebnismenge in die interne Tabelle itab eingefügt. BeiVerwendung in der Anweisung FETCH werden n Zeilen ab der aktuellen Cursor-Position entnommen.

Bei der Verwendung von INTO wird die interne Tabelle vor jedem Einfügen initialisiertund sie enthält in einer SELECT-Schleife nur die Zeilen des aktuellen Pakets. Bei Verwendungvon APPENDING wird bei jeder SELECT-Schleife bzw. bei jeder Entnahme mit FETCH ein weiteres Paket zu den vorhandenen Zeilen der internen Tabelle hinzugefügt.

Hinter ENDSELECT ist der Inhalt von itab bei der Verwendung von INTO undefiniert,d.h., die Tabelle kann entweder die Zeilen des letzten Pakets enthalten oder initial sein. Bei Verwendung von APPENDING behält der Inhalt von itab den Zustand des letzten Schleifendurchgangs bei.

Hinweise

  • Der Zusatz PACKAGE SIZE kann hinter INTO verwendet werden, um die Menge der auf einmaleingelesenen Daten zu beschränken. Ansonsten kann es beim Einlesen einer zu großen Datenmenge in eine interne Tabelle zu einem Laufzeitfehler kommen, wenn derenmaximale Größeüberschritten wird. Hinter APPENDING kann PACKAGE SIZE diesen Laufzeitfehler natürlich nicht verhindern.
  • Wenn der Zusatz PACKAGE SIZE mit dem Zusatz FORALL ENTRIES angegeben ist, werden alle selektierten Zeilen zunächst in eine interne Systemtabelleeingelesen und die Pakete erst bei der Übergabe von der Systemtabelle an die eigentliche Zieltabellegebildet. Der Zusatz FOR ALL ENTRIES hebt damit die Wirkung von PACKAGE SIZE zur Verhinderung von Speicherüberläufen auf.
  • Der Zusatz PACKAGE SIZE beeinflusst nicht die durch Profilparameter konfigurierbare Größe derPakete, in denen Daten zwischen Datenbankserver und Applikationsserver transportiert werden.

Beispiel

Einlesen aller Spalten der Ergebnismenge in eine interne Tabelle, deren Zeilentyp eine geschachtelteStruktur mit dem gleichen Aufbau wie die Ergebnismenge darstellt. In der Praxis wäre zu beachten,dass die Spalte carrid zweimal mit gleichem Inhalt in der Ergebnismenge vorhanden ist und dassdieser Inhalt nach der Zuweisung redundant in den Spalten struc1-carrid und struc2-carrid der internen Tabelle abgelegt ist.

DATA: BEGIN OF wa,
        struc1 TYPE scarr,
        struc2 TYPE spfli,
      END OF wa.

DATA itab LIKE SORTED TABLE OF wa
          WITH UNIQUE KEY table_line.

SELECT *
       FROM scarr
         INNER JOIN spfli ON scarr~carrid = spfli~carrid
       INTO TABLE itab.

LOOP AT itab INTO wa.
  WRITE: / wa-struc1-carrid,
           wa-struc1-carrname,
           wa-struc2-connid.
ENDLOOP.


CPI1466 during Backup   CL_GUI_FRONTEND_SERVICES - Frontend Services  
Diese Dokumentation steht unter dem Copyright der SAP AG.


Length: 20619 Date: 20120526 Time: 213917     triton ( 666 ms )