Bin grad an einer art Batch Job dran und möchte daten aus einem anderen system ins sap bringen.
Hole mir die Daten aus einer DB2 Tabelle und will diese nun über einen Update ins SAP bringen.
wenn ich nun den update machen will und es mehr als 2000 datensätze sind bekomm ich den Dump. DBIF_RSQL_INVALID_RSQL.
Die frage ist, ob ich den Dump richtig versteh, das es eine begrenzung gibt, oder das der fehler woanderst herkommt.
Hier noch die auszüge des dumps:
Fehleranalyse
Es ist eine Ausnahme aufgetreten, die weiter unten näher erläutert wird.
Die Ausnahme, der die Klasse 'CX_SY_OPEN_SQL_DB' zugeordnet ist,
wurde in der Prozedur "SET_SAP_DATA" "(FORM)" weder abgefangen,
noch durch eine RAISING-Klausel propagiert.
Da der Aufrufer der Prozedur nicht mit dem Auftreten der Ausnahme
rechnen konnte, wurde das laufende Programm abgebrochen.
Der Grund für die Ausnahme ist:
Das aus der SAP-Open SQL-Anweisung erzeugte SQL-Statement verstößt gegen
eine Restriktion des dem R/3-System zugrundeliegenden Datenbanksystems.
Mögliche Fehlerursachen:
o Die maximale Größe eines SQL-Statements wurde überschritten.
o Das Statement enthält zu viele Eingabevariablen.
o Die Eingabedaten benötigen mehr Platz als vorhanden.
o ...
Details finden sich in der Regel im Systemlog (SM21) und im
Entwickler-Trace des jeweiligen Workprozesses (ST11).
Im Entwickler-Trace werden im Fehlerfalle häufig die aktuell geltenden
Restriktionen mitausgegeben.
Hinweise zur Fehlerbehebung
Die Ausnahme muß entweder verhindert werden, innerhalb der Prozedur
"SET_SAP_DATA" "(FORM)" abgefangen werden oder
ihr potentielles Auftreten in der RAISING-Klausel der Prozedur
deklariert werden.
Um die Ausnahme zu verhindern, beachten Sie bitte folgendes:
Das betreffende SAP-Open SQL Statement muß in mehrere Statements
aufgeteilt werden.
Entstand das Problem durch die Verwendung einer zu großen Tabelle
in einem IN [range tab] Konstrukt, so kann statt dessen die Verwendung
des FOR ALL ENTRIES-Zusatzes angezeigt sein.
Bei Verwendung dieses Zusatzes wird das Statement unter Beachtung der
Restriktionen des jeweiligen Datenbanksystems in geeignete Portionen
zerlegt.
Falls der Fehler in einem nicht modifizierten SAP-Programm vorkommt
findet sich vielleicht eine Vorablösung im SAP-Hinweissystem.
Falls Sie selbst Zugang zum SAP-Hinweissystem haben, so suchen Sie
bitte zunächst mit folgenden Schlagworten:
Wenn ich das richtig sehe, kommt bei dir irgendwo mal ein SQL vor welcher in der Where-Bedinung mit einem Range arbeitet, in diesem mehr als 2000 Sätze stehen.
Das vertragen viele Datenbanken leider nicht! (in dem Fall ist es ja intern ein SQL mit einer Wherebedinung welche 2000 Oder-Verknüpfungen hat)
Deshalb gibt es ja die möglichkeit über FOR ALL ENTRIES, da dieser einen NESTED LOOP macht(sprich er erzeugt dadurch intern mehrere SQL´s.
Bei UPDATES kann man ja aber auch das ganze in mehreren Etapen machen.