使用绑定变量

来源:互联网 发布:我的世界手机版家具js 编辑:程序博客网 时间:2024/04/27 07:12

绑定变量(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语句方式大大缩短。

原创粉丝点击