Ansicht
Dokumentation

ABENSELECT_INTO_LOB_HANDLES - SELECT INTO LOB HANDLES

ABENSELECT_INTO_LOB_HANDLES - SELECT INTO LOB HANDLES

rdisp/max_wprun_time - Maximum work process run time   Vendor Master (General Section)  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

SELECT, LOB-Handles

In einer eigenständigen SELECT- oder einer WITH-Anweisung, aber nicht in einer FETCH-Anweisung, können in der INTO-Klausel LOB-Handles als Leseströme und als Lokatoren erzeugt werden.

Voraussetzungen

Ein LOB der Ergebnismenge kann einer LOB-Handle-Komponente eines Arbeitsbereichs oder einer einzelnen Referenzvariablen für ein LOB-Handle zugewiesen werden. Der statische Typ jeder LOB-Handle-Komponente muss das Interface IF_ABAP_DB_LOB_HANDLE enthalten und zur entsprechenden Komponente der Datenquelle passen, d.h., allgemeiner oder gleich einer der folgenden Systemklassen für Streaming oder Lokatoren sein:

Der Stromtyp bzw. Lokatortyp muss also zum Datentyp des LOBs passen.

Regeln

Wenn ein LOB der Ergebnismenge einer Selektion an eine LOB-Handle-Komponente eines Arbeitsbereichs oder an einzelne Referenzvariablen für ein LOB-Handle zugewiesen wird, wird entweder

erzeugt und die Referenzvariable zeigt nach Ausführung der SELECT-Anweisung auf das Objekt. Die verwendete Klasse wird durch den Datentyp der Spalte der Ergebnismenge und den statischen Typ der Zielvariable oder bei Bedarf durch den Zusatz CREATING festgelegt. Der zu lesende LOB kann mit den Methoden des LOB-Handles ausgewertet oder über dieses weitergereicht werden.

Ein solcherart erzeugter LOB-Handle, d.h., ein Lesestrom oder ein Lokator lebt bis er

  • explizit mit seiner Methode CLOSE aus dem Interface IF_ABAP_CLOSE_RESOURCE,

Leseströme, nicht aber Lokatoren, werden zusätzlich implizit bei der Anweisung ENDSELECT geschlossen.

Bei Zugriff auf einen geschlossenen LOB-Handle kommt es zu einem Laufzeitfehler.

Besondere Eigenschaften offener Leseströme bzw. Lokatoren:

  • Solange es noch einen offenen Lesestrom zu einer -Anweisung gibt, ist die zugehörige Datenbankoperation nicht abgeschlossen. Dieser Zustand kann nur bei SELECT SINGLE auftreten, da es kein implizites Schließen der Leseströme durch ENDSELECT gibt. In diesem Fall kann man sich vor dem Schließen des Lesestroms mit dessen Methode GET_STATEMENT_HANDLE aus dem Interface IF_ABAP_DB_READER eine Referenz auf ein Objekt der Klasse CL_ABAP_SQL_SELECT_STATEMENT, einer Unterklasse von CL_ABAP_SQL_STATEMENT_HANDLE, besorgen. Mit den dort implementierten Methoden der abstrakten Oberklasse kann der Zustand der -Anweisung abgefragt und es können alle noch offenen Ströme geschlossen werden.
  • Für einen einmal erzeugten Lokator wird garantiert, dass er immer mit den gleichen LOB-Daten arbeitet. Wenn die zugehörige LOB-Spalte modifiziert wird, während ein Lokator geöffnet ist, wird vorher auf der Datenbank eine interne Kopie der LOB-Daten für den Lokator angelegt.

Einschränkungen

Es gelten folgende Einschränkungen:

  • Zu einer Open-SQL-Anweisung können maximal 16 Datenströme geöffnet werden.
  • In einer Datenbank-LUW kann es maximal 16 Open-SQL-Anweisungen geben, deren Datenströme gleichzeitig geöffnet sind.
  • Innerhalb einer Datenbank-LUW können maximal 1000 LOB-Handles geöffnet sein.
  • Wenn die Erzeugung von LOB-Handles zusammen mit dem Zusatz SINGLE stattfindet, müssen in der WHERE-Bedingung alle Primärschlüsselfelder in mit AND verknüpften relationalen Ausdrücken auf Gleichheit überprüft werden.

Hinweis

Ein LOB-Handle sollte immer so schnell wie möglich mit seiner Methode CLOSE geschlossen werden. Siehe Streaming und Lokatoren.

Beispiele

Beispiel

Einlesen eines BLOBs in einen Lesestrom.






Addresses (Business Address Services)   CPI1466 during Backup  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 8081 Date: 20240523 Time: 085351     sap01-206 ( 103 ms )