CLOB
имат ограничение на размера от 4G
Но ограничението тук е с UTL_HTTP.read_text
който връща резултата като VARCHAR2
(имате имплицитно преобразуване тук).
За да извличате лесно големи текстови обекти от мрежата, вероятно имате нужда от HttpUriType.getClob
Ако по някаква причина искате да се придържате към UTL_HTTP
, ще трябва да извършвате цикъл, за да прочетете вашите данни част по част. Нещо подобно:
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;
Вижте http:// oracle-base.com/articles/misc/retrieving-html-and-binaries-into-tables-over-http.php различни примери