【发布时间】:2012-04-14 12:21:00
【问题描述】:
我正在使用 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;
【问题讨论】:
-
我已经格式化了你的代码。请在创建问题时突出显示相关部分并单击
{}按钮。 -
INSERT ... SELECT会比使用游标快很多。 -
你想做什么?你的代码根本不起作用。以数字开头的名称必须使用
"2nd"明确区分大小写,您的第一个游标似乎需要一个参数,但这不存在...正如a_horse_with_no_name 建议的那样,您可能应该只使用一个简单的insert。 -
嗨 Ben,其实我错过了这个参数...现在我已经修改了。
标签: oracle stored-procedures plsql