都是向一个表里面插入1000条数据。
create table t(x int);
带参数的存储过程
create or replace procedure proc1
as
begin
for i in 1 .. 1000
loop
execute immediate
'insert into t values(:x)' using i;
end loop;
end;
/
不带参数的存储过程
create or replace procedure proc2
as
begin
for i in 1 .. 1000
loop
execute immediate
'insert into t values('||i||')';
end loop;
end;
运行看看结果:
SQL> exec proc2;
PL/SQL 过程已成功完成。
已用时间: 00: 00: 00.40
SQL> exec proc1;
PL/SQL 过程已成功完成。
已用时间: 00: 00: 00.03
SQL> exec proc2;
PL/SQL 过程已成功完成。
已用时间: 00: 00: 00.23
SQL> exec proc1;
PL/SQL 过程已成功完成。
已用时间: 00: 00: 00.01
SQL>
结论
使用带参数的SQL,性能比不带参数的高10-20倍。也许没有这么悬殊,但差距绝对应该是很明显的。