oracle性能优化-绑定参数

没有绑定参数sql

  1. set timing on     
  2. declare    
  3.     type rc is ref cursor;   
  4.     l_rc rc;   
  5.     l_dummy all_objects.object_name%type;   
  6.        
  7.     l_start number default dbms_utility.get_time;   
  8. begin  
  9.     for i in 1 .. 1000   
  10.      loop   
  11.         open l_rc for  
  12.          'select object_name from all_objects   
  13.          where object_id ='||i;   
  14.          fetch l_rc into l_dummy;   
  15.          close l_rc;   
  16.      end loop;   
  17.      dbms_output.put_line(l_dummy);   
  18.     dbms_output.put_line(round((dbms_utility.get_time-l_start)/100,2)||'seconds...');   
  19.  end;   
  20. /   
  21.   
  22. SQL>    
  23.     
  24. PL/SQL procedure successfully completed   
  25.     
  26. Executed in 115.469 seconds  

 

绑定参数sql

  1. set timing on     
  2. declare    
  3.     type rc is ref cursor;   
  4.     l_rc rc;   
  5.     l_dummy all_objects.object_name%type;   
  6.        
  7.     l_start number default dbms_utility.get_time;   
  8. begin  
  9.     for i in 1 .. 1000   
  10.      loop   
  11.         open l_rc for  
  12.          'select object_name from all_objects   
  13.          where object_id =:x'   
  14.          using i;   
  15.          fetch l_rc into l_dummy;   
  16.          close l_rc;   
  17.      end loop;   
  18.      dbms_output.put_line(l_dummy);   
  19.     dbms_output.put_line(round((dbms_utility.get_time-l_start)/100,2)||'seconds...');   
  20.  end;   
  21. /   
  22.   
  23. SQL>    
  24.     
  25. PL/SQL procedure successfully completed   
  26.     
  27. Executed in 1.782 seconds  

 

从上面两个例子说明: 执行没有绑定变量的sql语句就像在调用每个方法前编译子例程一样。想像一下,把java源代码交给用户,在调用类里的方法前,要先调用java编辑器,编译类,运行方法,然后产生字节码。下一次要执行相同的方法时,又必须做相同的事情;编译,运行,然后产生字节码。

固定链接地址 评论(2)

oracle自定义聚合函数现实字符串连接

  在项目经常在group by 时想把字符串也累计出来,如:

select min(t.weighttime), --过衡最小时间
        max(t.weighttime),--过衡最大时间
        sum(t.netweight), --重量
        count(t.truckboxid),--车数
        t.boxlicence   -- 车皮号
  from truckweighboxes t

阅读全文 "oracle自定义聚合函数现实字符串连接" »

固定链接地址 评论(0)

查找所有班级的前5名学生sql现实

 

  1. --sqlserver 实现   
  2. select   distinct   *        
  3.   from   ta   as   tt      
  4.   where   学生姓名   in      
  5.   (   select   top   5学生姓名      
  6.       from   ta      
  7.       where   班级=tt.班级      
  8.                       order   by   成绩   desc)      
  9.   order   by   班级,   成绩   desc   

 

阅读全文 "查找所有班级的前5名学生sql现实" »

固定链接地址 评论(0)

Oracle递归查询

Start with...Connect By子句递归查询一般用于一个表维护树形结构的应用。
  1. --插入测试数据:   
  2. INSERT INTO provider(ID,NAME,PID) VALUES('1','10','');   
  3. INSERT INTO provider(ID,NAME,PID) VALUES('2','11','1');   
  4. INSERT INTO provider(ID,NAME,PID) VALUES('3','20','');   
  5. INSERT INTO provider(ID,NAME,PID) VALUES('4','12','1');   
  6. INSERT INTO provider(ID,NAME,PID) VALUES('5','121','2');   
  7.   
  8.   
  9. 从Root往树末梢递归   
  10. select * from provider   
  11.  start with pid is null  
  12.  connect by prior id = pid   
  13.   
  14. 从末梢往树ROOT递归   
  15. select * from TBL_TEST   
  16.  start with id=5   
  17.  connect by prior pid = id  
固定链接地址 评论(0)
+