暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 用大容量绑定插入行

ASKTOM 2019-01-11
305

问题描述

嗨,

我想插入500002行到我的表通过应用限制10k,现在多少次我的限制是迭代。是5倍还是6倍。

plz可以给出一个示例示例吗?

专家解答

它将是:

ceil( 500002/10k)

既不是5也不是6 :-)

SQL> select ceil( 500002  / 10000 ) from dual;

CEIL(500002/10000)
------------------
                51


但假设你的意思是50002,这里有一个演示

SQL> create table t_source ( x int);

Table created.

SQL> create table t_target ( x int );

Table created.

SQL>
SQL> insert into t_source
  2  select rownum from dual
  3  connect by level <= 50002;

50002 rows created.

SQL>
SQL> set serverout on
SQL> declare
  2    type array is table of int index by pls_integer;
  3    a array;
  4    cursor c is select * from t_source;
  5    iteration_count int := 0;
  6  begin
  7    open c;
  8    loop
  9      fetch c bulk collect into a limit 10000;
 10      exit when a.count = 0;
 11      iteration_count := iteration_count + 1;
 12      dbms_output.put_line('This is iteration '||iteration_count);
 13
 14      forall i in 1 .. a.count
 15         insert into t_target values (a(i));
 16
 17    end loop;
 18    close c;
 19  end;
 20  /
This is iteration 1
This is iteration 2
This is iteration 3
This is iteration 4
This is iteration 5
This is iteration 6

PL/SQL procedure successfully completed.


文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论