2012-04-14 3 views
1

나는 Oracle CURSOR를 사용하여 대용량의 레코드를 반복하여 한 테이블에서 다른 테이블로 삽입합니다. 삽입하는 데 시간이 오래 걸리는 것을 발견했습니다. CURSOR를 사용하지 않고 대량 레코드를 처리 할 수있는 다른 방법이 있습니까? 다음은 내가 수행중인 활동입니다.대량 레코드를 oracle DB에 삽입하는 다른 방법은 무엇입니까?

CURSOR FIRST_TAB(bu_emp_id IN Number) IS 
    SELECT * FROM FIRST_TABLE lst 
    where lst.emp_id = bu_emp_id; 

v_first FIRST_TAB%ROWTYPE; 

CURSOR SECOND_TAB(bu_emp_id IN Number) IS 
    SELECT * FROM SECOND_TABLE 2nd WHERE 2nd.emp_id= bu_emp_id; 

v_second SECOND_TAB%ROWTYPE; 

CURSOR THIRD_TAB(bu_emp_id IN Number) IS 
    SELECT * FROM THIRD_TABLE 3rd WHERE 3rd.emp_id = bu_emp_id; 

v_third THIRD_TAB%ROWTYPE; 
------------------------------------------------------------------------ 

open FIRST_TAB(bu_emp_id); 
    loop 
    fetch FIRST_TAB into r_first; 
    exit when FIRST_TAB %NOTFOUND; 

-- iNSERT STATEMENT------- 

    open SECOND_TAB(bu_emp_id); 
    loop 
     fetch SECOND_TAB into v_second; 
     exit when SECOND_TAB %NOTFOUND; 

-- iNSERT STATEMENT------- 

     open THIRD_TAB(bu_emp_id); 
     loop 
      fetch THIRD_TAB into v_third ; 
      exit when THIRD_TAB %NOTFOUND; 

-- iNSERT STATEMENT------- 

     end loop; 
     close THIRD_TAB; 
    end loop; 
    close SECOND_TAB; 
    end loop; 
    close FIRST_TAB; 
+1

코드를 포맷했습니다. 관련 섹션을 강조 표시하고 질문을 작성할 때'{}'버튼을 클릭하십시오. – Ben

+1

'INSERT ... SELECT'는 커서를 사용하는 것보다 훨씬 빠릅니다. –

+0

당신은 무엇을하려고합니까? 코드가 전혀 작동하지 않습니다. 숫자로 시작하는 이름은''2nd "'를 사용하여 명시 적으로 처리해야하며 첫 번째 커서에는 매개 변수가 필요하지만 존재하지 않습니다 ... a_horse_with_no_name에서 알 수 있듯이 간단한 '삽입'을 사용해야합니다. – Ben

답변

3

길 찾기 방법은 SQL을 참조하십시오. 자신의 사례에서 데이터가 그 접근법에 적합한지 여부는 분명하지 않지만이를 수행하기 위해 노력합니다. 엔진의 한 문장으로 작업을 완전히 개선하지 않을 것입니다.

관련 문제