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

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

 2009-05-12 13:13:51 来源:WEB开发网   
核心提示:通常我们获取游标数据是用 fetch some_cursor into var1, var2 的形式,当游标中的记录数不多时不打紧,Oracle 中使用 fetch bulk collect into 批量效率的读取游标数据,然而自 Oracle 8i 起,Oracle 为我们提供了 fetch bulk collec

通常我们获取游标数据是用 fetch some_cursor into var1, var2 的形式,当游标中的记录数不多时不打紧。然而自 Oracle 8i 起,Oracle 为我们提供了 fetch bulk collect 来批量取游标中的数据,存中即是合理的。它能在读取游标中大量数据的时候提升效率,就像 SNMP 协议中,V2 版比 V1 版新加了 GET-BULK PDU 一样,也是用来更高效的批量取设备上的节点值(原来做过网管软件开发,故联想到此)。

fetch bulk collect into 的使用格式是:fetch some_cursor collect into col1, col2 limit xxx。col1、col2 是声明的集合类型变量,xxx 为每次取数据块的大小(记录数),相当于缓冲区的大小,可以不指定 limit xxx 大小。下面以实际的例子来说明它的使用,并与逐条取记录的 fetch into 执行效率上进行比较。测试环境是 Oracle 10g  10.2.1.0,查询的联系人表 sr_contacts 中有记录数 1802983 条,游标中以 rownum 限定返回的记录数。

使用 fetch bulk collect into 获取游标数据

declare    

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

  type id_type is table of sr_contacts.sr_contact_id%type;     
  v_id id_type;     
       
  type phone_type is table of sr_contacts.contact_phone%type;     
  v_phone phone_type;     
       
  type remark_type is table of sr_contacts.remark%type;     
  v_remark remark_type;   

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

1 2 3 4 5 6  下一页

Tags:Oracle 使用 fetch

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