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

Posted

技术标签:

【中文标题】通过具有 78000 个字符的 Oracle 12c DB 使用 utl_http 请求 REST 调用正文【英文标题】:Request Body of REST Call using utl_http through Oracle 12c DB having 78000 chars 【发布时间】:2017-02-15 07:32:09 【问题描述】:

我尝试了以下方式进行 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】:

如果您在数据库中安装了 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);

【讨论】:

是的,我们想到了这个选项,但我们的数据库中没有安装这个选项。如果可能,请建议任何其他替代方案。 这可能是:apexplained.wordpress.com/2016/03/21/…

以上是关于通过具有 78000 个字符的 Oracle 12c DB 使用 utl_http 请求 REST 调用正文的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Oracle 表的 varchar 列中的第二个和第四个字符之后插入“/”

我们如何仅从 Oracle 中具有各种日期和字符串格式的列中提取日期?

Oracle PL SQL 过程需要修改以接受具有所有类型字符的数组并拆分

查找特定字符串格式的 Oracle 查询

转 Oracle12c/11个 Client安装出现"[INS-30131]"错误“请确保当前用户具有访问临时位置所需的权限”解决办法之完整版

具有 2x2 输入的双向 GRU