Generate Subroutine-Pool mit Unterprogrammen u. Insert-State

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

Generate Subroutine-Pool mit Unterprogrammen u. Insert-State

Beitrag von Steffi221185 (Specialist / 132 / 0 / 0 ) »
Hallo zusammen,

ich hab mal wieder ein Problem. Wie schon im Thread http://www.apentia-forum.de/viewtopic.php?t=8926 erklärt möchte ich mehrer Insert Statements hintereinander absetzen.

Vorgeschichte:
Ich habe eine itab und deren Inhalt möchte ich in eine Tabelle unter Oracle einfügen. Der Inhalt der Itab ist unbekannt und wird im Programm dynamisch ermittelt. Leider kann ich nicht mehrere Insert Statements hinterheinander in einer Excec Endexec (siehe Link oben) absetzen. Dann dachte ich mir ich schreib das ganze in einen Subroutinen Pool. Das funktioniert auch aber nur wenn ich nicht zuviele Statements absetze. Also ich habe im Subroutine Pool mehrere Unterprogramme die jeweils ein Insert Statement enthalten.

Mein Problem ist jetzt das ich ca. 90000 Datensätze in eine Oracle DB-Tabelle einfügen muss. Das hat zur Folge das bei meinem momentanen Programm 90000 Unterprogramme in einem Subroutin-Pool erstellt werden. Was wiederum zu einem sy-subrc 8 führt mit der Aussage das ich zuviele Unterprogramme erstellt habe.
Und für jedes Statement einen eigenen Subroutine-Pool zu generieren funktioniert auch nicht, da der Aufruf solcher in einem Modus nur 36 mal funktioniert.
Kann mir vielleicht irgendjemand weiter helfen bzw. hat irgendjemand eine Idee wie ich das Problem lösen kann oder weiß vielleicht jemand wie ich dynamische Insert-Statements absetzen kann damit ich den Subroutine-Pool nicht benötige?

Bin für jede Anregung dankbar.

Gruß Steffi

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


Beitrag von ewx (Top Expert / 4842 / 310 / 638 ) »
Hi Steffi,

das ist zwar alles irgendwie von hinten durch die Brust ins Auge, aber versuch doch mal, deine Dynamische Unterroutinenerzeugung in einen Funktionsbaustein auszulagern. Diesen rufst du dann auf mit STARTNIG NEW TASK.

Vielleicht geht das.

Gruß, Enno

Beitrag von Steffi221185 (Specialist / 132 / 0 / 0 ) »
danke für den Tipp.
Kann ich denn einen Funktionbaustein dynamisch erzeugen oder muss ich den voher schon erstellt haben?

Im Prinzip gehts mir ja nicht um meine Unterprogramme sondern möcht ich meine Insert-Statements irgenwie absetzen. Hab auch schon überlegt ein Programm voher zu erstellen und immer wieder ein Insert Statement einzufügen und das Programm dann ausführen und das bei jedem Datensatz den ich in die DB-Tabelle einfüge. Nur leider ist das nicht grad sehr Performance optimierend und ich muss immer ein Anderes Programm erstellt haben.

Beitrag von ewx (Top Expert / 4842 / 310 / 638 ) »
Du könntest einen Fuba erstellen, dem du den Code für den Subroutinenpool als auch die Daten mitgibst. Der Fuba erzeugt dann die Unterroutine und startet sie.
Gruß, Enno

Beitrag von Steffi221185 (Specialist / 132 / 0 / 0 ) »
das wäre ja dann im prinzip das gleiche wie wenn ich nen externes programm erstelle und das immer wieder aufrufe. oder versteh ich dich falsch?
den fuba müsst ich ja dann auch immer wieder aufrufen.

Beitrag von Andreas G (Specialist / 175 / 0 / 0 ) »
ewx hat geschrieben:Hi Steffi,

das ist zwar alles irgendwie von hinten durch die Brust ins Auge, aber versuch doch mal, deine Dynamische Unterroutinenerzeugung in einen Funktionsbaustein auszulagern. Diesen rufst du dann auf mit STARTNIG NEW TASK.

Vielleicht geht das.

Gruß, Enno
Ich beschäftige mich auch gerade mit einem ähnlichen Problem.
Hab das mit dem FuBa ausprobiert. Das Problem ist, das ich mit STARTING NEW TASK keine Importparameter angeben kann, und ich hätte die erzeugte dynamische Strucktur ja gerne wieder zurück, als Importparameter! :shock:

mfg Andi
Hauptsoch: HAUPTSOCH!

Beitrag von Steffi221185 (Specialist / 132 / 0 / 0 ) »
So das mit den 90000 Datensätzen wäre schon mal geschafft. Ich schreibe immer 100 Pakete weg.
Problem:
Habe ich z.b.: 189 Sätze zum schreiben werden 200 Sätze geschrieben.
Ich schreibe die Sätze mit
Insert Report und Perform Test von Report wegen. Die Daten werden jedes mal neu hinzugefügt und die itab für den insert Report auf initial gesätz. aber aus welchen gründen auch immer hält er die Daten noch im Speicher voll. Wenn ich durch mein Unterprogramm debugge hat er zum schluß auch nur 89 Insert-Statements stehen...ist er beim letzen angekommen kann man weiter debuggen (aber man sieht keinen Quellcode) und es werden die restlichen 11 Datensätze (89 + 11 = 100) hinzugefügt. Ich finde das ein wenig komisch vielleicht hatte ja jemand schon mal ein ähnliches Problem (Ich hoffe auch ihr habt mein Problem verstanden).

Beitrag von ewx (Top Expert / 4842 / 310 / 638 ) »
Steffi221185 hat geschrieben:das wäre ja dann im prinzip das gleiche wie wenn ich nen externes programm erstelle und das immer wieder aufrufe. oder versteh ich dich falsch?
den fuba müsst ich ja dann auch immer wieder aufrufen.
...aber der wird in einem separaten Modus aufgerufen... Und dann gilt die Begrenzung von 36 Subroutinepools für jeden STARTING NEW TASK-Aufurf.
Glaube ich.

Gruß, Enno

@Andi: Was auch immer du da vorhaben magst... Vielleicht kannst du mit EXPORTING/ IMPORTING MEMORY arbeiten?
Problem ist halt, dass der Call-Function-Starting-New-Task asynchron ist...

Aber eigentlich müsste doch auch ein COMMIT WORK die Beschränkungen wieder aufheben, oder? Ist nicht der Performance letzter Schluß, aber wahrscheinlich einfacher, als mit Zwischenpuffern zu arbeiten...

Beitrag von Steffi221185 (Specialist / 132 / 0 / 0 ) »
Hallo Enno,

unter welchem Release soll das funktionieren? haben Release 6.40. und in der Hilfe find ich das nicht mit STARTING NEW TASK.

Gruß Steffi


Beitrag von Steffi221185 (Specialist / 132 / 0 / 0 ) »
Danke wusste nicht das es ein RFC ist.

Beitrag von Steffi221185 (Specialist / 132 / 0 / 0 ) »
Habe ich z.b.: 189 Sätze zum schreiben werden 200 Sätze geschrieben.
Ich schreibe die Sätze mit
Insert Report und Perform Test von Report wegen. Die Daten werden jedes mal neu hinzugefügt und die itab für den insert Report auf initial gesätz. aber aus welchen gründen auch immer hält er die Daten noch im Speicher voll.
Ich versteh das nicht sogar mit einem Delete Report wird der Speicher bzw. das Programm nicht freigegeben und er schreibt immer noch zu viele Sätze. Solangsam weiß ich hier nicht mehr weiter.

Beitrag von Steffi221185 (Specialist / 132 / 0 / 0 ) »
Ok das hät ich dann geschafft.

Wenn man von einem Report das Unterprogramm verändert und dann mit Perform aufruft wurde das veränderte noch nicht gespeichert. Deswegen einfach Unterprogramm weglassen und den Report mit "Submit" aufrufen.

Seite 1 von 1

Vergleichbare Themen

0
Antw.
1105
Views
Insert report oder Generate Subroutine Pool?
von naphro » 15.06.2007 11:01 • Verfasst in ABAP® Core
14
Antw.
5760
Views
Generate Subroutine Pool
von Steffi221185 » 26.10.2007 09:53 • Verfasst in ABAP® Core
4
Antw.
3436
Views
GENERATE SUBROUTINE POOL
von Gast » 25.05.2005 13:16 • Verfasst in ABAP® für Anfänger
1
Antw.
2249
Views
Generate Subroutine Pool Parameter
von codierknecht » 22.01.2008 15:40 • Verfasst in ABAP® Core
1
Antw.
1198
Views
BSP-Seiten und Unterprogrammen
von Alonso » 08.08.2005 15:22 • Verfasst in Web-Dynpro, BSP + BHTML

Ü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

aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 1550
Hilfe bei SWEC/SWE2
letzen Monat von retsch 1 / 8161