Ansicht
Dokumentation

ABENDYNAMIC_SQL_ABEXA - DYNAMIC SQL ABEXA

ABENDYNAMIC_SQL_ABEXA - DYNAMIC SQL ABEXA

BAL Application Log Documentation   BAL_S_LOG - Application Log: Log header data  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

SELECT, dynamische Token-Angabe

Das Beispiel demonstriert die dynamische Token-Angabe in für die Anweisung SELECT.

Quelltext

Ausführen

Beschreibung

Nach dem Programmstart kann der Name einer der DDIC-Datenbanktabellen SPFLI, SCARR oder SAPLANE eingegeben werden. Die eingegebene Tabelle wird dann mit der Tabelle SFLIGHT gemäß ihrer Fremdschlüsselbeziehung verknüpft. Hierbei wird einfach davon ausgegangen, dass alle namensgleichen Felder in einer Fremdschlüsselbeziehung zueinander stehen.

Der ausgewählte Tabellenname wird dem Feld right zugewiesen. Mithilfe der RTTS-Klasse CL_ABAP_TYPEDESCR wird die Typbeschreibung für die Spalten der linken und rechten Tabelle des Joins bestimmt. Über die Methode GET_COMPONENTS werden diese in zwei Typbeschreibungstabellen comp_tab1 bzw. comp_tab2 abgelegt, die für jede Spalte der jeweiligen DDIC-Datenbanktabelle einen Eintrag enthalten.

Dann wird zunächst ein Fragment der FROM-Klausel erzeugt, das die Namen der zu verknüpfenden Tabellen enthält; die FROM-Klausel wird später mit den ON-Bedingungen vervollständigt.

In die SELECT-Liste sollen alle Spalten der linken Tabelle aufgenommen werden, sowie diejenigen Spalten der rechten Tabelle, für die es keine namensgleichen Spalten in der linken Tabelle gibt. Der Inhalt der Typbeschreibungstabellen wird in Schleifen prozessiert.

Zunächst werden die Spalten der linken Tabelle behandelt. Dabei wird erst die aktuelle Spalte in die dynamische SELECT-Liste aufgenommen, die in der internen Tabelle select angegeben werden soll. Dem Spaltennamen comp1-name wird der Tabellenname in left vorangestellt, um die Eindeutigkeit zu gewährleisten. Über die Anweisung MOVE-CORRESPONDING wird die Spaltenbeschreibung aus comp_tab1 in eine interne Tabelle comp_tab_join kopiert, deren Typ für die spätere Objekterzeugung geeignet ist.

Die Spalten der rechten Tabelle werden in der linken Tabelle gesucht. Falls die Spalte comp2-name nur in der rechten Tabelle existiert, wird sie zunächst in die Typbeschreibungstabelle comp_tab_join aufgenommen. Anschließend wird sie - genau wie zuvor - allen Spalten der linken Tabelle der SELECT-Liste select hinzugefügt.

Falls die in comp2-name enthaltene Spalte in beiden Tabellen existiert, so wird eine ON-Bedingung, welche die gleichnamigen Spalten der linken und rechten Tabelle vergleicht, an die dynamische FROM-Klausel from angehängt.

Mittels der Typbeschreibungstabelle comp_tab_join und der statischen Methode CREATE der Klasse CL_ABAP_STRUCTDESCR kann nun ein passendes Typbeschreibungsobjekt für die Struktur des Zielbereichs der SELECT-Anweisung angelegt werden. Dieses Typbeschreibungsobjekt könnte jetzt hinter dem Zusatz TYPE HANDLE der Anweisung CREATE DATA angegeben werden, um einen strukturierten Arbeitsbereich zu erzeugen. Wir gehen aber gleich einen Schritt weiter und legen mit der Methode CREATE der Klasse CL_ABAP_TABLEDESCR ein Typbeschreibungsobjekt für eine interne Tabelle dieses Zeilentyps an und erzeugen diese mit CREATE DATA. Die dynamisch erzeugten internen Tabellen können durch Dereferenzierung des anonymen Datenobjekts mit tref->* an Operandenpositionen verwendet werden.

Anschließend werden die Daten mit einer vollständig dynamischen SELECT-Anweisung gelesen. Der Inhalt der anonymen internen Tabelle wird angezeigt.






RFUMSV00 - Advance Return for Tax on Sales/Purchases   BAL_S_LOG - Application Log: Log header data  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 4060 Date: 20240523 Time: 163241     sap01-206 ( 95 ms )