首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

PL/SQL批处理话语:BULK COLLECT 和 FORALL对优化的贡献

2013-02-19 
PL/SQL批处理语句:BULK COLLECT 和 FORALL对优化的贡献我们知道PL/SQL程序中运行SQL语句是存在开销的,因为

PL/SQL批处理语句:BULK COLLECT 和 FORALL对优化的贡献
       我们知道PL/SQL程序中运行SQL语句是存在开销的,因为SQL语句是要提交给SQL引擎处理
       这种在PL/SQL引擎和SQL引擎之间的控制转移叫做上下文却换,每次却换时,都有额外的开销

       请看下图:

       PL/SQL批处理话语:BULK COLLECT 和 FORALL对优化的贡献

       但是,FORALL和BULK COLLECT可以让PL/SQL引擎把多个上下文却换压缩成一个,这使得在PL/SQL中的要处理多行记录的SQL语句执行的花费时间骤降
       请再看下图:

       PL/SQL批处理话语:BULK COLLECT 和 FORALL对优化的贡献

       下面详解这爷俩
       
       ㈠ 通过BULK COLLECT 加速查询
          
          ⑴ BULK COLLECT 的用法

             
             采用BULK COLLECT可以将查询结果一次性地加载到collections中,而不是通过cursor一条一条地处理
             可以在select into ,fetch into , returning into语句使用BULK COLLECT
             注意在使用BULK COLLECT时,所有的INTO变量都必须是collections
             
             举几个简单例子:
             
             ① 在select into语句中使用bulk collect

DECLARE  --声明集合类型  TYPE vehtab IS TABLE OF transportation%ROWTYPE;  --初始化一个这个类型的集合  gas_quzzlers vehtab;BEGIN  SELECT * BULK COLLECT INTO gas_quzzlers FROM transportation WHERE mileage  < 20;  ...

          ⑸ 对批量操作使用RETURNING子句
             
             有了returning子句后,我们可以轻松地确定刚刚完成的DML操作的结果,无须再做额外的查询工作
             例子请见BULK COLLECT 的用法的第三小点
             
             
       ㈡ 通过FORALL 加速DML
          
          FORALL告诉PL/SQL引擎要先把一个或多个集合的所有成员都绑定到SQL语句中,然后再把语句发送给SQL引擎
          
          ⑴ 语法

          未完待续,,,

热点排行