2、PL/SQL块中使用绑定变量

[sql] view plaincopyprint?
SQL> create table t(id number,val number);  -->首先创建表t                                                               
                                                                                                                        
SQL> get get_parse.sql                                                                                                  
  1  select name,value from v$mystat a join v$statname b                                                                
  2* on a.statistic#=b.statistic# where b.name like 'parse count%';                                                     
                                                                                                                        
SQL> @get_parse.sql   -->获得当前的解析情况,此时hard parase 为63                                                        
                                                                                                                        
NAME                           VALUE                                                                                    
------------------------- ----------                                                                                     
parse count (total)              394                                                                                    
parse count (hard)                63                                                                                    
parse count (failures)             1                                                                                    
                                                                                                                        
-->下面的pl/sql代码中,Oracle实现自动变量自动绑定,执行了30次的insert操作,但oracle认为每次执行的语句都是一样的           
                                                               
                                                                                                                        
SQL> begin                     -->执行pl/sql代码,向表t中插入30条记录                                                    
  2  for i in 1..30 loop                                                                                                
  3  insert into t values(i,i*2);                                                                                       
  4  end loop;                                                                                                          
  5  commit;                                                                                                            
  6  end;                                                                                                               
  7  /                                                                                                                  
                                                                                                                        
PL/SQL procedure successfully completed.                                                                                
                                                                                                                        
SQL>  @get_parse              -->代码执行后的结果,硬解析数量仅仅增加了3次                                               
                                                                                                                        
NAME                           VALUE                                                                                    
------------------------- ----------                                                                                     
parse count (total)              401                                                                                    
parse count (hard)                67                                                                                    
parse count (failures)             1                                                                                    
SQL> create table t(id number,val number);  -->首先创建表t                                                            
                                                                                                                      
SQL> get get_parse.sql                                                                                                
  1  select name,value from v$mystat a join v$statname b                                                              
  2* on a.statistic#=b.statistic# where b.name like 'parse count%';                                                   
                                                                                                                      
SQL> @get_parse.sql   -->获得当前的解析情况,此时hard parase 为63                                                     
                                                                                                                      
NAME                           VALUE                                                                                  
------------------------- ----------                                                                                  
parse count (total)              394                                                                                  
parse count (hard)                63                                                                                  
parse count (failures)             1                                                                                  
                                                                                                                      
-->下面的pl/sql代码中,Oracle实现自动变量自动绑定,执行了30次的insert操作,但oracle认为每次执行的语句都是一样的        
                                                                
                                                                                                                      
SQL> begin                     -->执行pl/sql代码,向表t中插入30条记录                                                 
  2  for i in 1..30 loop                                                                                              
  3  insert into t values(i,i*2);                                                                                     
  4  end loop;                                                                                                        
  5  commit;                                                                                                          
  6  end;                                                                                                             
  7  /                                                                                                                
                                                                                                                      
PL/SQL procedure successfully completed.                                                                              
                                                                                                                      
SQL>  @get_parse              -->代码执行后的结果,硬解析数量仅仅增加了3次                                            
                                                                                                                      
NAME                           VALUE                                                                                  
------------------------- ----------                                                                                  
parse count (total)              401                                                                                  
parse count (hard)                67                                                                                  
parse count (failures)             1