绑定变量(bind variable)是查询中的一个占位符。为了不重复解析相同的SQL语句,在第一次解析之后,oracle将SQL语句存放在内存中,这块位于系统全局区SGA的共享池中的内存可以被所有数据库用户共享。因此,当执行的SQL语句与以前执行过的语句完全相同,则oracle就能很快获的已经被解析的语句以及最好的执行效率。
1、打开及时功能
SQL> set timing on
2、创建表 timetest
SQL> create table timetest
2 (
3 tid number
4 );
Table created.
Elapsed: 00:00:00.02
创建普通动态语句插入过程
SQL> CREATE OR REPLACE
2 PROCEDURE normal AS
3 BEGIN
4 for i in 1 .. 10000
loop
execute immediate 'insert into timetest values('||i||')';
6 7 end loop;
8 END;
9 /
SQL> exec normal;
PL/SQL procedure successfully completed.
Elapsed: 00:00:10.98
创建绑定变量插入过程
CREATE OR REPLACE
PROCEDURE sharevar AS
BEGIN
4 for i in 1 .. 10000
5 loop
execute immediate 'insert into timetest values(:X)' using i;
end loop;
END;
9 /
Procedure created.
Elapsed: 00:00:00.15
SQL> truncate table timetest;
Table truncated.
Elapsed: 00:00:00.16
SQL> exec sharevar;
PL/SQL procedure successfully completed.
Elapsed: 00:00:01.80
对比 以上两个过程的执行时间可以发现,在同一表插入10000条记录,使用绑定变量锁使用的时间比动态创建SQL语句方式大大缩短。