1

oracle CURSORを使用して、大量のレコードを繰り返し、あるテーブルから別のテーブルに挿入しています。挿入に非常に時間がかかることがわかりました。CURSORを使用せずにバルクレコードを処理する別の方法はありますか?これが私が行っている活動です。

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;
4

1 に答える 1

3

ストレートSQLでそれを行う方法を見つけてください。あなたのデータがそのアプローチに適しているかどうかは、あなたの例からは明らかではありませんが、これを行うよう努めてください。エンジン内の 1 つのステートメントですべてを実行することは改善されません。

于 2012-04-14T15:56:26.530 に答える