Ansicht
Dokumentation

CL_SQL_RESULT_SET - Ergebnismenge einer SQL Query

CL_SQL_RESULT_SET - Ergebnismenge einer SQL Query

Vendor Master (General Section)   CPI1466 during Backup  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

Funktionalität

Die Ausführung einer Query durch die Methode EXECUTE_QUERY eines CL_SQL_STATEMENT bzw. CL_SQL_PREPARED_STATEMENT Objekts liefert eine Instanz der Klasse CL_SQL_RESULT_SET als Ergebnis. Ein solches "Result Set" Objekt repräsentiert das Ergebnis der Query, also die Menge von Tabellenzeilen, die von der Datenbank geholt werden sollen. Es verwaltet implizit einen Cursor, der einen Zugriff auf die zuletzt von der Datenbank gelesene Ergebniszeile erlaubt. Initial ist dieser Cursor vor die erste Ergebniszeile positioniert.

Die Methode NEXT positioniert den Cursor auf die nächste Ergebniszeile und liefert als Methodenergebnis den Wert 0, falls es keine weiteren Ergebniszeilen mehr gibt und den Wert 1 sonst. Mittels dieser Methode können somit in einer Programmschleife können alle Zeilen der Ergebnismenge nacheinander von der Datenbank geholt und weiterverarbeitet werden. Bevor jedoch diese Methode zum ersten Mal aufgerufen werden kann, muß jedoch festgelegt werden, in welche Datenobjekte des ABAP Programms die Spaltenwerte der von der Datenbank gelesenen Ergebniszeile übertragen werden sollen. Hierzu steht die Methode SET_PARAM zur Verfügung, die für jede Spalte der Ergebniszeile einmal gerufen werden muß und der eine Referenz auf dasjenige ABAP-Datenobjekt übergeben wird, in welches die Methode NEXT den betreffenden Spaltenwert schreibt. Die Aufrufreihenfolge von SET_PARAM korrespondiert hierbei zu der Spaltenreihenfolge der Select-Liste, d.h. der erste Aufruf von SET_PARAM spezifiziert die Ausgabevariable für die erste Spalte der Select-Liste, der zweite Aufruf die Ausgabevariable für die zweite Spalte usw.

In manchen Fällen ist es ziemlich umständlich und mühsam eine Ergebniszeile spaltenweise zu verarbeiten, insbesondere dann, wenn die Select-Liste aus allen Spalten einer Tabelle besteht (SELECT * ...) und das Ergebnis in eine Tabellen-Workarea gestellt werden soll. Für diesen Zweck gibt es eine spezielle Methode SET_PARAM_STRUCT, der im Unterschied zu SET_PARAM nicht nur eine Referenz auf ein einfaches Datenobjekt, sondern auf eine ABAP Struktur mitgegeben werden kann. Wichtig ist hierbei allerdings, daß die Feldreihenfolge in dieser Struktur zur Reihenfolge der Spalten in der Select-Liste paßt, ansonsten kann es zu Laufzeitfehlern kommen. Der Aufruf der Methode NEXT weist den Wert der ersten Spalte der ersten Strukturkomponente zu, den Wert der zweiten Spalte der zweiten Komponente usw.

Mittels der Methode NEXT kann zu einer Zeit immer nur eine Zeile der Ergebnismenge geholt und verarbeitet werden. Eine alternative Methode besteht darin, mehrere Zeilen der Ergebnismenge oder sogar das gesamte Ergebnis auf einmal in eine interne ABAP-Tabelle vom Tabellentyp Standard einzulesen. Zur Spezifikation der Ausgabetabelle bietet die Klasse CL_SQL_RESULT_SET die Methode SET_PARAM_TABLE an. Diese Methode erwartet als Parameter eine Referenz auf diejenige interne Standardtabelle, in die die Ergebniszeilen übertragen werden sollen. Auch hier besteht die Anforderung darin, daß die Struktur der referierten internen Tabelle, also die Komponenten der einzelnen Tabellenzeilen, exakt mit den Spalten der Select-Liste korrespondiert. Das Lesen der Ergebnismenge in die interne Tabelle erfolgt mittels der Methode NEXT_PACKAGE. Diese Methode besitzt einen optionalen Parameter UPTO, der vom Aufrufer dazu benutzt werden kann, um die Menge der zu lesenden Ergebniszeilen auf die in UPTO angegebene Anzahl zu begrenzen. Als Methodenergebnis wird die tatsächliche Anzahl der in die interne Tabelle übertragenen Ergebniszeilen an den Aufrufer zurückgegeben. NEXT_PACKAGE arbeitet mit APPEND-Semantik, d.h. die gelesenen Zeilen werden immer nur an die bereits existierenden angehängt.

Soll zwischen zwei Aufrufen der Methoden NEXT bzw. NEXT_PACKAGE die Ausgabevariablen geändert werden, so muß zuvor die Methode CLEAR_PARAMETERS aufgerufen werden. Erst danach können durch nachfolgende Aufrufe von SET_PARAM[...] neue Ausgabevariablen gesetzt werden.

Ein Aufruf der Methode CLOSE beendet die Ergebnismengenverarbeitung. Sie sollte immer aufgerufen werden, wenn die Verarbeitung vorzeitig abgebrochen werden soll oder wenn die Ergebnismenge komplette verarbeitet wurde (d.h. wenn die Methode NEXT den Ergebniswert 0 geliefert hat). Nur hierdurch ist garantiert, daß alle auf der Datenbank für diese Query belegten Resourcen auch wieder freigegeben werden können.

Beziehungen

Beispiel

Siehe Beispielprogramm ADBC_DEMO.

Hinweise

Weiterführende Informationen






CPI1466 during Backup   General Data in Customer Master  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 4982 Date: 20240426 Time: 030013     sap01-206 ( 143 ms )