我正在阅读expert-oracle-database-architecture book。汤姆正在解释关于绑定变量的内容。
请告诉我第一个程序与第二个程序有什么不同?
根据我的理解,我们使用execute immediate
来执行动态SQL语句或匿名PL / SQL块。
这是目标表:
create table t ( x int );
以下是程序#1的示例:
ops$tkyte%ORA11GR2> create or replace procedure proc_name1
2 as
3 begin
4 for i in 1 .. 10
5 loop
6 execute immediate
7 'insert into t values ( '||i||')';
8 end loop;
9 end;
10 /
以下是程序#2的示例:
create or replace procedure proc_name2
as
begin
for i in 1 .. 10
loop
insert into t values ( i);
end loop;
end;
答案 0 :(得分:5)
“使用execute immediate会有什么好的表现吗?”
EXECUTE IMMEDIATE是不该做的。它的性能会更糟,因为它完成了非动态示例所做的所有事情,而且还有为循环的每次迭代硬解析语句的开销。
Tom的观点是,没有经验的开发人员在不需要时经常使用EXECUTE IMMEDIATE(或其他形式的动态SQL)。动态SQL是坏消息。除了性能影响: