将批量记录插入oracle数据库的替代方法是什么?

将批量记录插入oracle数据库的替代方法是什么?,oracle,stored-procedures,plsql,Oracle,Stored Procedures,Plsql,我使用oracle游标来迭代大量记录,以便从一个表插入到另一个表。我发现插入要花很长时间。有没有其他方法可以不使用游标处理批量记录。 以下是我正在进行的活动 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 Numbe

我使用oracle游标来迭代大量记录,以便从一个表插入到另一个表。我发现插入要花很长时间。有没有其他方法可以不使用游标处理批量记录。 以下是我正在进行的活动

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;

找到一种用直接SQL实现的方法。从您的示例来看,您的数据是否适合这种方法并不明显,但请努力做到这一点。在引擎中的一条语句中,您不会完全改进工作。

我已经格式化了您的代码。创建问题时,请突出显示相关部分并单击
{}
按钮来执行此操作。
插入。。。选择
将比使用光标快得多。您想做什么?你的代码根本不起作用。以数字开头的名称必须使用
“2nd”
显式大小写,并且您的第一个光标似乎需要一个参数,但该参数不存在。。。正如一匹没有名字的马所建议的那样,你可能应该只使用一个简单的
insert
。嗨,本,实际上我错过了这个参数……现在我已经修改了。