oracle - 通过来自 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请求不允许我发送如此庞大的数据。处理这个问题的最佳方法是什么,或者有没有办法以更小的块发送它?
解决方案
您可以使用标头告诉目标您要以块的形式发送数据。
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 服务器都会愉快地接受分块请求。
推荐阅读
- node.js - 如何翻译外部路由器,使用 i18n + express 请求?
- javascript - 尽管所有反应路由器版本冲突,如何在反应中进行服务器端渲染?
- powershell - 无法使用 PowerShell 中的 Remove-Item 从列表中删除文件
- jquery - 通过输入值动态更改日期选择器中的日期
- javascript - 调试在每个浏览器上都可以正常运行但通过 CefPython 呈现的 Javascript 函数
- javascript - 如何在 JavaScript 中将 Request 对象转换为可字符串化的对象?
- sql - CTE 滚动 3 个月平均
- python - 即使键盘中断,我仍然可以保存结果吗?
- flutter - UserAccountsDrawerHeader CircleAvatar 突然不显示
- azure-iot-hub - 为什么在进行 intune 设备注册时不显示用于连接到 Azure AD 的登录消息?