UTL_HTTP read_text和read_raw应用
response数据量小
read_line或者 read_text
示例:
l_http_request UTL_HTTP.REQ;
l_http_response UTL_HTTP.RESP;
BUFFER VARCHAR2(32767);
l_response_clob CLOB;
xml XMLTYPE;
BEGIN
…
l_http_response := UTL_HTTP.GET_RESPONSE(l_http_request);
DBMS_LOB.CREATETEMPORARY(l_response_clob, TRUE, DBMS_LOB.CALL);
DBMS_LOB.OPEN(l_response_clob, DBMS_LOB.LOB_READWRITE);
BEGIN
LOOP
UTL_HTTP.READ_TEXT(l_http_response, BUFFER, 32767);
DBMS_LOB.WRITEAPPEND(l_response_clob, LENGTH(BUFFER), BUFFER);
END LOOP;
EXCEPTION
WHEN UTL_HTTP.END_OF_BODY THEN
UTL_HTTP.END_RESPONSE(l_http_response);
END;
DBMS_LOB.CLOSE(l_response_clob);
xml := XMLTYPE(l_response_clob);
… do whatever you need with XML docuemnt
DBMS_LOB.FREETEMPORARY(l_response_clob);
END;
response数据量很大
建议使用read_raw
示例
dbms_lob.createtemporary( blob_buf, true );
http_resp:= utl_http.get_response(http_req);
—
begin
loop
utl_http.read_raw( http_resp, raw_buf );
dbms_lob.append( blob_buf, raw_buf );
end loop;
exception
when utl_http.END_OF_BODY
then
null;
end;
utl_http.end_response( http_resp );
— 刘轶鹤