2016-03-28 80 views
1

我正在阅读expert-oracle-database-architecture book。在这个汤姆解释关于绑定变量。为什么在这里使用immediate immediate?

你能告诉我第一个程序和第二个程序有什么不同吗? 根据我的理解,我们使用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; 
+1

这是一个不要做的例子 – Sathya

+0

所以除了他们写的方式之外,没有什么区别。使用立即执行会有什么好的表现吗? – Wolfgang

+1

它是(ab)使用'execute immediate'语句。另外,严格来说,根本就不需要一个简单插入的过程,你可以简单地用纯SQL来完成。 –

回答

5

“会有使用立即执行是否有很好的性能?“

EXECUTE IMMEDIATE是什么不能做。它的性能会更差,因为它完成了非动态示例的所有工作,而且还有为循环的每次迭代硬解析语句的开销。

汤姆指出,缺乏经验的开发人员在不需要时经常使用EXECUTE IMMEDIATE(或其他形式的动态SQL)。动态SQL是个坏消息。除了对性能的影响:

  • 这是很难比静态SQL编写
  • 语法错误是运行时异常不编译错误
  • 这是很难维持的(因为依赖不出现影响分析是棘手数据字典视图)。