【问题标题】:What is the alternative way to insert bulk records into oracle DB?将批量记录插入 oracle DB 的替代方法是什么?
【发布时间】: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


【解决方案1】:

找到一种直接使用 SQL 的方法。从您的示例中不清楚您的数据是否适合该方法,但请努力做到这一点。您不会完全在引擎中的一个语句中改进做事。

【讨论】:

    猜你喜欢
    • 2015-04-19
    • 1970-01-01
    • 2010-10-20
    • 2016-09-11
    • 2017-07-23
    • 1970-01-01
    • 1970-01-01
    • 2021-07-23
    • 2017-12-29
    相关资源
    最近更新 更多