[quote]原帖由
mychary 于 2008-6-30 16:41 发表

SQL> create table demo as select * from emp where 1=2;
表已创建。
SQL> declare
2 type newtype is table of emp%rowtype INDEX BY BINARY_INTEGER;
3 shape newtype;
4 i number;
5 j number;
6 begin
7 dbms_output.put_line('beginforall:'||to_char(sysdate,'yyyy hh24:mi:ss'));
8 for v in (select rownum,t.* from emp t where rownum<4) loop
9 shape(v.rownum).ename:=v.ename;
10 shape(v.rownum).empno :=v.empno;
11 end loop;
12
13 for j in 1 .. 3 loop
14 insert into demo(empno,ename) values(shape(j).empno,shape(j).ename);
15 end loop;
16 dbms_output.put_line('endforall'||to_char(sysdate,'yyyy hh24:mi:ss'));
17 end;
这个虽然能实现,不过效率和
declare
type newtype is table of emp%rowtype INDEX BY BINARY_INTEGER;
shape newtype;
i number;
j number;
begin
dbms_output.put_line('beginforall:'||to_char(sysdate,'yyyy hh24:mi:ss'));
for v in (select rownum,t.* from emp t where rownum<4) loop
insert into demo(empno,ename) values(v.empno,v.ename);
end loop;
dbms_output.put_line('endforall'||to_char(sysdate,'yyyy hh24:mi:ss'));
end;
就没区别了,我自己测试了一下,
插入2万条记录,4个字段,这2段方式都是消耗2秒钟,并没有我最初的例子里面的shape的效率优势。
如果是1个字段的话,插入4万条记录,用shape就只要1秒种,明显比另一个快。