CLOB
haben eine Größenbeschränkung von 4G
Aber die Einschränkung hier ist mit UTL_HTTP.read_text
die das Ergebnis als VARCHAR2
zurückgibt (Sie haben eine implizite Umwandlung hier).
Um große Textobjekte einfach aus dem Internet abzurufen, benötigen Sie wahrscheinlich HttpUriType.getClob
Falls Sie aus irgendeinem Grund bei UTL_HTTP
bleiben möchten , müssen Sie eine Schleife ausführen, um Ihre Daten Chunk für Chunk zu lesen. Etwas in der Art:
BEGIN
...
l_clob CLOB;
l_text VARCHAR2(32767);
BEGIN
DBMS_LOB.createtemporary(l_clob, FALSE);
...
l_http_request := UTL_HTTP.begin_request(your_URI);
l_http_response := UTL_HTTP.get_response(l_http_request);
-- Loop to read data chunk by chunk up to the end
BEGIN
LOOP
UTL_HTTP.read_text(l_http_response, l_text, 32766);
DBMS_LOB.writeappend (l_clob, LENGTH(l_text), l_text);
END LOOP;
EXCEPTION
WHEN UTL_HTTP.end_of_body THEN
UTL_HTTP.end_response(l_http_response);
END;
Siehe http:// oracle-base.com/articles/misc/retrieving-html-and-binaries-into-tables-over-http.php für verschiedene Beispiele