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;
我已經格式化了您的代碼。請在創建問題時突出顯示相關部分並單擊「{}」按鈕來完成此操作。 – Ben 2012-04-14 12:37:45
「INSERT ... SELECT」比使用遊標要快得多。 – 2012-04-14 12:39:17
你想做什麼?你的代碼根本無法工作。以數字開頭的名稱必須使用「2nd」明確地包含在內,而第一個遊標似乎需要一個參數,但這不存在......正如a_horse_with_no_name建議您應該使用簡單的'insert'。 – Ben 2012-04-14 12:42:53