WEB开发网
开发学院数据库Oracle Oracle 中使用 fetch bulk collect into 批量效率... 阅读

Oracle 中使用 fetch bulk collect into 批量效率的读取游标数据

 2009-05-12 13:13:51 来源:WEB开发网   
核心提示: fetch into 耗时: 0.141秒, 0.140秒, 0.125秒, 0.141秒, 0.125秒当 rownum <= 1000 时:fetch bulk collect into 耗时:0.016秒, 0.015秒, 0.016秒, 0.016秒, 0.015秒fetch

fetch into 耗时:                 0.141秒, 0.140秒, 0.125秒, 0.141秒, 0.125秒

当 rownum <= 1000 时:

fetch bulk collect into 耗时:0.016秒, 0.015秒, 0.016秒, 0.016秒, 0.015秒

fetch into 耗时:                 0.016秒, 0.031秒, 0.031秒, 0.032秒, 0.015秒

从测试结果来看游标的记录数越大时,用 fetch bulk collect into 的效率很明显示,趋于很小时就差不多了。

注意了没有,前面使用 fetch bulk collect into 时前为每一个查询列都定义了一个集合,这样有些繁琐。我们之前也许用过表的 %rowtype 类型,同样的我们也可以定义表的 %rowtype 的集合类型。看下面的例子,同时在这个例子中,我们借助于集合的 first、last 属性来代替使用 count  属性来进行遍历。

declare 

--声明需要集合类型及变量,参照字段的 type 来声明类型   

  type contacts_type is table of sr_contacts%rowtype;  
  v_contacts contacts_type;   

cursor all_contacts_cur is --用 rownum 来限定取出的记录数来测试   

     select * from sr_contacts where rownum <= 10000;   

begin 
      
    open all_contacts_cur;  
    loop  
        fetch all_contacts_cur bulk collect into v_contacts limit 256;  
        for i in v_contacts.first .. v_contacts.last loop --遍历集合  
            --用 v_contacts(i).sr_contact_id/v_contacts(i).contact_phone/v_contacts(i).remark  
            --的形式来取出各字段值来执行你的业务逻辑  
            null; --这里只放置一个空操作,只为测试循环取数的效率  
        end loop;  
        exit when all_contacts_cur%notfound;  
    end loop;  
    close all_contacts_cur;  
end; 
declare

上一页  1 2 3 4 5 6 7  下一页

Tags:Oracle 使用 fetch

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接