首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Oracle PL/SQL网络请求并行化

Oracle PL/SQL网络请求并行化
EN

Stack Overflow用户
提问于 2011-04-22 03:00:44
回答 2查看 1K关注 0票数 3

我有一个PL/SQL脚本,通过超文本传输协议使用SYS.UTL_HTTP获取一些XML数据。但是网络速度很慢。我会同时打开5-10个HTTP连接,获取5-10个页面并进行处理。如何在PL/SQL中并行化这些网络请求?

EN

回答 2

Stack Overflow用户

发布于 2011-04-22 03:08:56

最简单的选择可能是派生多个数据库作业,并让每个作业产生一个调用子集。根据Oracle版本的不同,您可以使用DBMS_JOBDBMS_SCHEDULER包来生成您自己的作业来完成此操作。

代码语言:javascript
运行
复制
FOR x IN (SELECT url_to_access FROM table_of_urls)
LOOP
  dbms_job.submit( l_jobid,
                   'BEGIN procedure_to_access_url(' || x.url_to_access || '); END;' );
END LOOP;

但是,如果您使用的是11.2,那么Oracle提供了一个框架,让数据库使用DBMS_PARALLEL_EXECUTE package自动将工作分配给许多DBMS_SCHEDULER作业。

票数 2
EN

Stack Overflow用户

发布于 2011-04-22 05:48:45

单个PL/SQL不能很容易地产生线程。你能做的就是拥有utl_http.req的多个变量。然后你

代码语言:javascript
运行
复制
v_req1 := utl_http.begin_request('http....');
v_req2 := utl_http.begin_request('http....');
v_req3 := utl_http.begin_request('http....');
v_req4 := utl_http.begin_request('http....');
v_resp := utl_http.get_response(v_req1);
...
v_resp := utl_http.get_response(v_req2);
...
v_resp := utl_http.get_response(v_req3);
...
v_resp := utl_http.get_response(v_req4);
...

这是否真的更快,取决于另一端的服务器。然而,在这种情况下处理错误可能是一件痛苦的事情。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5748551

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档