在oracle 中,对于一个提交的sql语句,存在两种可选的解析过程, [color=red]一种叫做硬解析,一种叫做软解析。[/color]
[color=red]一个硬解析需要经解析,制定执行路径,优化访问计划等许多的步骤。[/color]硬解析不仅仅耗费大量的cpu,更重要的是会占据重要的门闩(latch)资源,严重的影响系统的规模的扩
大(即限制了系统的并发行),而且引起的问题不能通过增加内存条和cpu的数量来解决。之所以这样是因为门闩是为了顺序访问以及修改一些内存区域而设置的,这些内存区
域是不能被同时修改。[color=red]当一个Sql语句提交后,oracle会首先检查一下共享缓冲池(shared pool)里有没有与之完全相同的语句,如果有的话只须执行软分析即可,否则就得进
行硬分析。[/color]
而[color=red]唯一使得oracle能够重复利用执行计划的方法就是采用绑定变量。绑定变量的实质就是用于替代sql语句中的常量而替代成变量。绑定变量能够使得每次提交的Sql语句都完全一样。[/color]
[color=red]一个硬解析需要经解析,制定执行路径,优化访问计划等许多的步骤。[/color]硬解析不仅仅耗费大量的cpu,更重要的是会占据重要的门闩(latch)资源,严重的影响系统的规模的扩
大(即限制了系统的并发行),而且引起的问题不能通过增加内存条和cpu的数量来解决。之所以这样是因为门闩是为了顺序访问以及修改一些内存区域而设置的,这些内存区
域是不能被同时修改。[color=red]当一个Sql语句提交后,oracle会首先检查一下共享缓冲池(shared pool)里有没有与之完全相同的语句,如果有的话只须执行软分析即可,否则就得进
行硬分析。[/color]
而[color=red]唯一使得oracle能够重复利用执行计划的方法就是采用绑定变量。绑定变量的实质就是用于替代sql语句中的常量而替代成变量。绑定变量能够使得每次提交的Sql语句都完全一样。[/color]
declare
name varchar2(255) ;
begin
name :='lan' ;
delete from t ;
commit ;
for i in 1..100
loop --使用变量来表示 using in 变量1,变量2
execute immediate 'insert into t(age,name) values(:y,:x)' using in i, name ;
end loop ;
end ;
/