使用utl_http通过具有78000个字符的Oracle 12c DB请求REST调用

时间:2017-02-15 07:32:09

标签: oracle rest oracle12c

我尝试了以下方式进行http调用:

v_doc_fin clob;

if v_doc_fin is not null then
         DBMS_OUTPUT.PUT_LINE (v_doc_fin);
         req := utl_http.begin_request(url, 'POST',' HTTP/1.1');
         utl_http.set_header(req, 'user-agent', 'mozilla/4.0'); 
         utl_http.set_header(req, 'content-type', 'application/json'); 
         utl_http.set_header(req, 'Content-Length', length(v_doc_fin));
         utl_http.write_text(req, v_doc_fin);
         res := utl_http.get_response(req);         
         end if; 

我尝试使用WRITE_RAW和write_text来发出HTTP请求,但都没有帮助。

UTL_HTTP.write_text (req, v_doc_fin) ;
UTL_HTTP.WRITE_RAW (r => req, data => UTL_RAW.CAST_TO_RAW(v_doc_fin));

我也试过打破请求体,但它也没有帮助。

30000个字符限制内的请求工作正常,但当超过该限制时,它会失败。

请建议或建议在Oracle 12c中使用如此大量的数据发送此请求正文的方式。

1 个答案:

答案 0 :(得分:0)

如果您在数据库中安装了Apex,则可以使用apex_web_service.make_rest_request。 它发送和接收clob数据。

https://docs.oracle.com/database/121/AEAPI/apex_web_service.htm#AEAPI537

实施例

 l_result_clob := apex_web_service.make_rest_request(p_url         => my_url  
                                                  ,p_http_method => 'POST'
                                                  ,p_body        => l_content_clob);