Ich habe die folgende SQL, die ich in Oracle SQL Developer gegen einen Oracle 10g Server ausführen möchte:
%Vor%Wenn ich versuche, es auszuführen, erhalte ich den folgenden Fehler:
%Vor%Meine Zeichenfolgen sind gelegentlich viel länger als 4000 Zeichen. Irgendwelche Ideen, wie ich dieses Problem umgehen kann?
Sie müssen ein CLOB als Eingabe für XMLTYPE () anstelle von VARCHAR verwenden.
Verwenden Sie dbms_lob.loadclobfromfile
, um die XML-Datei aus einer Datei zu laden, oder indem Sie die XML-Datei in 32000 Zeichen-Chunks aufteilen und an den CLOB anhängen.
Sie können das nicht mit "normalem" SQL umgehen. (Aber ich wäre froh, dass ich mich als falsch erwiesen habe)
Sie werden irgendeine Art von Programmiersprache benötigen (z.B. Java, Stored Procedure), um damit umzugehen.
Alternativ können Sie die XML-Daten in eine Tabelle hochladen (kann mit SQL * Loader durchgeführt werden) und die Spaltenwerte in Ihrer Abfrage verwenden.
Dies ist eine der Einschränkungen von Oracle, die mich wirklich verrückt macht. Vor 20 Jahren könnte das etwas akzeptabel gewesen sein, aber heutzutage ...
Woher kommt dieser großartige große Teil von XML? Ich nehme an, Sie tippen es nicht ein.
Im Allgemeinen würde ich mir ein Programm ansehen, das die Quelle liest und sie in ein CLOB umwandelt. Das könnte ein perl / python / was auch immer Skript auf einem Client sein, oder es könnte eine serverseitige Routine sein, die den Wert von einem Webserver holt.
Sie können die sql-Problemumgehung verwenden, indem Sie / wo jeder Teil bei weniger als 4000 Zeichen eingefügt wird / aktualisiert.
1 Die Einfügung als Einfügung mit dem ersten Teil ist das sql Literal bis zu 4000 Chars 2 Führen Sie die zusätzlichen Teile als ein Update durch, das die vorherigen Teile mit dem nächsten Teil verkettet, in dem das nächste Teil bis zu 4000 Zeichen enthält 3 Wiederholen Sie Schritt 2, bis das große SQL-Literal aktualisiert ist.
Beispiel,
%Vor%