我有一个PL/SQL脚本,通过超文本传输协议使用SYS.UTL_HTTP获取一些XML数据。但是网络速度很慢。我会同时打开5-10个HTTP连接,获取5-10个页面并进行处理。如何在PL/SQL中并行化这些网络请求?
发布于 2011-04-22 03:08:56
最简单的选择可能是派生多个数据库作业,并让每个作业产生一个调用子集。根据Oracle版本的不同,您可以使用DBMS_JOB
或DBMS_SCHEDULER
包来生成您自己的作业来完成此操作。
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
作业。
发布于 2011-04-22 05:48:45
单个PL/SQL不能很容易地产生线程。你能做的就是拥有utl_http.req的多个变量。然后你
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);
...
这是否真的更快,取决于另一端的服务器。然而,在这种情况下处理错误可能是一件痛苦的事情。
https://stackoverflow.com/questions/5748551
复制相似问题