FUNCTION SEND_QUERY(a_url varchar2, a_proc_name varchar2, a_xml clob, a_log_id number default null) RETURN clob AS l_blob blob := convert_to_blob(a_xml, 'AL32UTF8'); l_http_request UTL_HTTP.req; l_http_response UTL_HTTP.resp; l_varchar2_response varchar2(32767); l_buff raw(32767); -- l_return xmltype; l_dpd_xml_log_id number; l_cnt number; l_offset number; BEGIN if a_log_id is null then l_dpd_xml_log_id := spsr_xml_log_seq.nextval; else l_dpd_xml_log_id := a_log_id; end if; xml_loger(l_dpd_xml_log_id, a_proc_name, xmltype(a_xml)); --формируем HTTP запрос l_http_request := UTL_HTTP.begin_request(a_url, 'POST', 'HTTP/1.1'); --проставим заголовки UTL_HTTP.set_header(l_http_request, 'Content-Type', 'text/xml'); UTL_HTTP.set_header(l_http_request, 'Content-Length', dbms_lob.getlength(l_blob)); --тут циклом читаем clob который надо передать и кусками передаем через HTTP соединение l_cnt := 32767; l_offset := 1; loop dbms_lob.read(l_blob, l_cnt, l_offset, l_buff); UTL_HTTP.write_raw(l_http_request, l_buff); l_offset := l_offset + l_cnt; exit when l_cnt < 32767; end loop; --получаем HTTP ответ l_http_response := UTL_HTTP.get_response(l_http_request); UTL_HTTP.read_text(l_http_response, l_varchar2_response); -- dbms_output.put_line(l_varchar2_response); UTL_HTTP.end_response(l_http_response); xml_loger(l_dpd_xml_log_id, a_proc_name, XMLTYPE.createxml(l_varchar2_response)); RETURN l_varchar2_response; END;