OPEN CURSOR bricht wegen Datenbank-Commit ab

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
8 Beiträge • Seite 1 von 1
8 Beiträge Seite 1 von 1

OPEN CURSOR bricht wegen Datenbank-Commit ab

Beitrag von Dudu (ForumUser / 18 / 0 / 0 ) »
Hi,

ich bastel mir gerade ein kleinen Report zu Recht, in welchem unter anderem aus einer zu bestimmenden Tabelle entweder alle oder nur teilweise Datensaetze ausgelesen (bzw. auf Frontend gespeichert) werden sollen. Bei einer kleinen Tabelle funktioniert es. Aber bei einer Testtabelle mit 21 Mio Datensaetzen bricht der Report wegen Speicherplatzmangel ab.

Okay, sehe ich ein. Bin bei meinen Recherchen auf OPEN CURSOR usw. gestossen. Habe dies auch implementiert. Leider bricht er immer noch ab, da anscheinend die zu speichernde Itab zu gross wird. Als der Weisheit letzter Schluss habe ich den Aufruf der Form zum Datendownload innerhalb die Verarbeitung der Datensaetze mit reingenommen und leere anschliessend vor der Neubefuellung die itabs. Leider bricht er mir jetzt wegen einem Datenbank-Commit ab, der durch den Aufruf des Fubas GUI_Download in der FORM data_download verursacht wird.

Wie kann ich den FuBa aufrufen und trotzdem die Verbindung zur Datenbank aufrechterhalten?

Code: Alles auswählen.

    
OPEN CURSOR g_cursor FOR
SELECT DISTINCT (v_columns) FROM XYZ.

    DO.
      FETCH NEXT CURSOR g_cursor
        INTO TABLE <dyntable_2>
        PACKAGE SIZE 1000.
      IF sy-subrc NE 0.
        CLOSE CURSOR g_cursor.
        EXIT.
      ENDIF.
      LOOP AT <t_dyntable_2> ASSIGNING 
<wa_dyntable>.
* Verarbeitung
        IF ...
            INSERT <wa_t_dyntable> INTO TABLE  <dyntable>.
           ... 
        ENDIF.
      PERFORM download.
      ENDLOOP.
      FREE <wa_dyntable>.
      FREE <dyntable>.
      FREE <dyntable_2>.
    ENDDO.
Dankbar fuer jede Antwort ;-)

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Beitrag von Asaph (Expert / 580 / 6 / 1 ) »
Hi,

Deine 21 Mio Datensätze kann man doch bestimmt nach ausgewählten Feldern gruppieren?

Beispiel: Werke / oder Buchungskreise

loop at it_w-werks.

SELECT (v_columns) FROM XYZ
INTO TABLE <dyntable_2>
..
where werks = it_w-werks
...
loop at <dyntable_2> ...

perform download.
endloop.


endloop.


lg Andreas

Beitrag von Gast ( / / 0 / 3 ) »
Danke erstmal für die Antwort.

Leider kann ich nicht mit einem Where-Zusatz arbeiten. Da die zu lesenden Datensätze nach einer Formel ausgewält als Stichprobe herhalten sollen. Momentan ist die Stichprobe aber 100% der Daten, um einen Stresstest mit dem Report durchzuführen. Vielleicht möchte mal wirklich jemand dies machen.

Die Tabelle mit Name, Felder usw. ist am Anfang nicht bekannt. Es handelt sich um Faktentabellen im BW-System. Deshalb muss alles dynamisch sein.

Es muss doch eine Möglichkeit geben den Commit zu umgehen / zu unterdrücken (wie der Zusatz WITH HOLD).

Oder gibt es die Möglichkeit, nachdem der Commit (leider) stattgefunden hat, wieder den CURSOR zu erstellen, aber an der nächsten zu setzenden Cursorposition? Ich hoffe, ich habe es verständlich gemacht, was ich will. :cry:

Beitrag von Haubi (Expert / 625 / 20 / 30 ) »
Moinsen.

Vorschlag: Von allen zu exportierenden Tabellenzeilen im ersten Schritt nur die Schlüssel lesen und diese in einer ITab zwischenspeichern. Im zweiten Schritt wird diese Tabelle satzweise oder paketweise gelesen und für den Satz/das Paket die DB-Tabelle mit allen benötigten Spalten gelesen.

Vorteil: Die Schlüsselbegriffe sind verglichen mit der Gesamtbreite einer Tabelle meistens relativ schmal. Der erste Schritt belastet also den Hauptspeicher nicht so intensiv (Man sollte trotzdem mal rechnen: eine Schlüssellänge von 20 Bytes lässt allein die Schlüsseltabelle in Deinem Beispiel auf ~400MB anwachsen... :shock: )

Nachteil: Laufzeit (Es wird 2x selektiert)

Gruss,
Haubi
Das ABAP Kochbuch ab sofort bei Amazon...

I'd rather write code that writes code than write code...

Beitrag von Dudu (ForumUser / 18 / 0 / 0 ) »
Hallo,

danke für den Vorschlag. Aber leider wird dann wieder die Tablle so groß. Die Tabellen, um die es hier geht, können bis zu 16 Schlüsselfelder aufnehmen. Dürfte sie bei der Größe wahrscheinlich auch haben. Da wird die itab bei Deiner Rechnung noch größer werden.

Habe inzwischen noch ein zwei andere Lösungsmöglichkeiten im WWW gefunden, die mit unter aber auch nicht performanter sind bzw. über den Applikationsserver und dann File-Download gehen. Den Zeitverbrauch für den Weg will ich gar nicht erst wissen :cry:

Ich schreibe es, wenn ich eine Lösung gefunden habe.

Beitrag von Haubi (Expert / 625 / 20 / 30 ) »
Moinsen nochmal.

Wie wäre es dann mit dem Zusatz "PACKAGE SIZE" beim SELECT? Du bekommst dann entsprechend viele Zeilen in Deine ITab gestellt und kannst diese speichern. Allerdings darf zwischen zwei Paketen ebenfalls kein COMMIT kommen. Es empfiehlt sich also, die Datei zunächst auf dem App-Server abzulegen und erst im Nachgang einen Download auf den Frontend-Rechner vorzunehmen.

Gruss,
Haubi
Das ABAP Kochbuch ab sofort bei Amazon...

I'd rather write code that writes code than write code...

Beitrag von Asaph (Expert / 580 / 6 / 1 ) »
Hallo,

du kannst doch die Schlüsselfelder feststellen
(z.B. mit cl_abap_typedescr ) und dann gruppierte Daten abholen über dynamische where-Bedingungen
oder generate subroutine...


Gruß Andreas

Beitrag von Dudu (ForumUser / 18 / 0 / 0 ) »
Hi,

nach Rücksprache mit den zukünftigen Usern des Reports, schreibe ich ihn so um, dass die Daten auf dem Applikationsserver abgelegt werden. Die Berechtigungen werden wenigstens immer dazu vorhanden sein :D Keine Lust auf größere Baustelle.

Danke Euch nochmal :!:

Seite 1 von 1

Vergleichbare Themen

2
Antw.
1667
Views
Programmabbruch wg. Datenbank Commit
von KlausB » 25.07.2007 17:24 • Verfasst in ABAP® für Anfänger
1
Antw.
1167
Views
Select mit Open Cursor macht Probleme
von Wess » 21.02.2019 12:47 • Verfasst in ABAP® für Anfänger
4
Antw.
3103
Views
Job bricht ab bei MESSAGE W... ?
von cosmo » 16.03.2007 08:34 • Verfasst in ABAP® Core
4
Antw.
2320
Views
Internetverbindugn GUI<->SAP bricht nach 10 min ab
von babap » 24.01.2006 21:46 • Verfasst in Basis
2
Antw.
2224
Views
Installation MiniWAS 620 bricht ab
von Svenson » 02.11.2005 14:31 • Verfasst in Web Application Server

Über diesen Beitrag


Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.

Unbeantwortete Forenbeiträge

Daten an Tabelle binden
Gestern von Bright4.5 1 / 516
aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 2149
Hilfe bei SWEC/SWE2
letzen Monat von retsch 1 / 8744