ich hab folgendens Problem und zwar erstell ich zu den verschiedensten Datenbanktabellen einen Arbeitsbereich (TABLES /db/t_test) und öffne dann zu diesen einen Cusor, was auch wunderbar klappt, nur der weitere Fetch funktioniert bei einer einzigen Datenbanktabelle nicht und es kommt zu einem Quellsystemabruch.
Der einzige Unterschied der mir zu den anderen Tabellen aufgefallen wäre ist, dass die Größenkategorie um zwei Stufen (6) höher ist als bei den anderen. Kann das ein Problem darstellen? Gibt es eine Grenze was die Größe der Datenbanktabelle angeht um mit einem Cursor arbeiten zu können?
Quellcode:
open cursor with hold s_cursor for
select * from /db/t_test client specified
where client = sy-mandt and
vers = '9999999999'.
fetch next cursor s_cursor
appending corresponding fields
of table lt_test
package size lv_size.
Hallo,
leider hast Du nicht dazugeschrieben wie das Programm abbricht,
welche Fehlermeldung erscheint iim Kurzdump ?
ist es ein SAP oder DB (Oracle/MS...) Fehler ?
Gruss Edwin
sorry, hier kommt eine bessere erläuterung:
wenn ein fetch auf den cursor gemacht wird, wird einen ausnahme ausgelöst (cx_sy_open_sql_db) und in dem log steht dann: Quellsystemanschluß wurde abgebrochen.
MfG,
cola
* Quellsysteme broken off
catch cx_sy_open_sql_db.
....
Hallo,
da ich den Fehler so nicht kenne kann ich nur Vermutungen anstellen:
dauert der fetch so lange dass das System die Verbindung abbaut ?
gibt es vielleicht einen Index, den Du benutzen kannst ?
Hallo,
der Cursor sollte ja eigentlich sowas wie einen Index darstellen und was den fetch angeht, ich hab keine Ahnung wie lang der dauert und wie ich das feststellen könnte. Was ich weiß ist, dass wie schon gesagt die Größenkategorie eine höhere ist und dass mir sonst keine nennenswerten Unterschiede zu den anderen Tabellen aufgefallen sind. Die Menge der Datensätze ist in etwa der Durchschnitt, der anderen Tabellen und ich hab den Fetch auch schon mit mehr als einer 10fach größerer Datenmenge laufen lassen und es hat ohne weitere Probleme geklappt.
Wenn ich eine andere Lösung wüsste als übern Cursor, dann hätt ich das schon lange gemacht, weil die Methode einfach nie wirklich zuverlässig ist bzw. sein kann. Aber soweit ich das beurteilen kann, gibt es keinen anderen Weg und das heißt ich muss, das Problem mit der einen Tabelle irgendwie umgehen. Nur hab ich keine Ahnung wie (bis auf die eine Vermutung).
ich würde zuerst mal nach dem open cursor den Returncode abfragen. Möglicherweise hat der schon nicht funktioniert, dann kann der fetch nix machen.
Soweit ich mich erinnere wird beim ersten fetch von der Datenbank das Ergebnis ermittelt, der erste kann also durchaus sehr lange dauern. Du solltest vielleicht zwischendurch mit write oder message mal die Uhrzeit ausgeben...
wir haben es jetzt einfach mal zu einen Dump kommen lassen um evtl. mehr über den Fehler zu erfahren (wenn man nicht mehr weiter weiß probiert man einfach alles) und siehe da, da stand was von: konnte nicht in das Zielobjekt importiert werden. Ich hab mich so auf die Quelle versteift, dass ich das andere Ende völlig außer acht gelassen habe.
Jedenfalls hatte aus sonderbaren Gründen ein Feld auf einmal einen anderen Datentyp (ich will gar nicht wissen wie es dazu gekommen ist, schließlich hab ich die Struktur seit Ewigkeiten nicht angerührt und vorher hat es ja funktioniert, egal). Es geht wieder und ich bin glücklich