2011-04-21 4 views
3

SYS.UTL_HTTP를 사용하여 HTTP를 통해 XML 데이터를 가져 오는 PL/SQL 스크립트가 있습니다. 하지만 네트워크가 느립니다. 5-10 개의 동시 HTTP 연결을 열고 5-10 페이지를 가져 와서 처리합니다. PL/SQL에서 이러한 네트워크 요청을 어떻게 병렬화 할 수 있습니까?Oracle PL/SQL 네트워크 병렬 요청

답변

2

가장 쉬운 옵션은 여러 데이터베이스 작업을 생성하고 각각이 호출의 하위 집합을 작성하는 것입니다. 오라클 버전에 따라, 당신은 당신이 11.2에있는 경우 즉,이 작업을 수행 할

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; 

을 자신의 일자리를 생성하기 위해 DBMS_JOB 또는 DBMS_SCHEDULER 패키지를 사용할 수 있습니다, 그러나, 오라클은 데이터베이스가 할 수있는 프레임 워크를 제공하고 있습니다 DBMS_PARALLEL_EXECUTE package을 사용하여 많은 수의 DBMS_SCHEDULER 작업에 작업을 자동으로 할당합니다.

0

단일 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); 
... 

여부. 이 시나리오에서 오류를 처리하는 것은 어려울 수 있습니다.

관련 문제