oracle绑定变量与非绑定变量比较

阅读更多

案例演示前准备工作:

--alter system flush shared_pool;
--set timing on;
--从一个“空”的共享池开始,如果多次运营这些测试语句,就需要每次清空共享池,否则,非绑定变量sql将被缓存,这样看起来运行非常快

----案例--使用非绑定变量
declare
type rc is ref cursor;
l_rc rc;
l_dummy all_objects.object_name%type;
l_start number default dbms_utility.get_time;
begin
for i in 1..1000
loop open l_rc for
'select object_name from all_objects where object_id='||i;
fetch l_rc into l_dummy;
close l_rc;
end loop;
dbms_output.put_line(round((dbms_utility.get_time-l_start)/100,2)||'seconds...');
end;
/

 

----案例--使用绑定变量
declare
type rc is ref cursor;
l_rc rc;
l_dummy all_objects.object_name%type;
l_start number default dbms_utility.get_time;
begin
for i in 1..1000
loop open l_rc for
'select object_name from all_objects where object_id=:x' using i;
fetch l_rc into l_dummy;
close l_rc;
end loop;
dbms_output.put_line(round((dbms_utility.get_time-l_start)/100,2)||'seconds...');
end;
/

 
oracle绑定变量与非绑定变量比较_第1张图片
 使用非绑定变量的明显比使用绑定变量的耗时长,原因在于:非绑定变量每次查询都是一个新的查询,即在数据库中以前没有过的查询。每次查询必须经过分析、限定(名称解析)、安全检查、优化等等;而使用绑定变量的查询,绑定变量的值在查询执行时提供。查询经过一次编译后,查询方案存储在共享池(库高速缓存)中,可以用来检索和重用,故二者的差异是巨大的。因此我们在实际工作中,应根据实际情况进行选择。

  • oracle绑定变量与非绑定变量比较_第2张图片
  • 大小: 35.1 KB
  • 查看图片附件

你可能感兴趣的:(oracle绑定变量与非绑定变量比较)