首页 > 解决方案 > 通过来自 oracle 数据库的 post 请求发送大量数据

问题描述

我正在尝试使用 UTL_HTTP 通过来自 Oracle 的 HTTP 发布请求发送数据。代码是这样的:

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,'CONENT-LENGT',LENGTH(V_BODY)
UTL_HTTP.SET_HEADER(REQ,'CONTENT-TYPE','APPLICATION/JSON')
UTL_HTTP.SET_HEADER(REQ,'SDATE','01/06/2021')

UTL_HTTP.WRITE_RAW(REQ,UTL_RAW.CAST_TO_RAW(V_BODY)
RES := UTL_HTTP.GET_RESPONSE(REQ);
UTL_HTTP.READ_TEXT(RES,BUFFER);

V_BODY 参数内部是一个包含 JSON 的 clob,我从数据库中选择这个 json,然后放入一个 clob。现在,当所选数据记录大约 50 到 100 个请求时,请求工作正常,但我需要发送一百万条记录,当我尝试发送此类请求时,将 clob 作为参数时失败。它就像http请求不允许我发送如此庞大的数据。处理这个问题的最佳方法是什么,或者有没有办法以更小的块发送它?

标签: oraclehttppostclobutl-http

解决方案


您可以使用标头告诉目标您要以块的形式发送数据。

utl_http.set_header (l_request, 'Transfer-Encoding', 'chunked');

然后你使用你喜欢的分割机制分批发送数据

utl_http.write_raw(l_request, [first 32k]);
utl_http.write_raw(l_request, [next 32k]);

等等等等

如果这不起作用,则可能是接收器的问题,因为并非所有 Web 服务器都会愉快地接受分块请求。


推荐阅读