oracle下巧用bulkcollect實現(xiàn)cursor批量fetch的sql語句?
通常我們獲取游標數(shù)據(jù)是用 fetch some_cursor into var1, var2 的形式,當游標中的記錄數(shù)不多時不打緊。然而自 Oracle 8i 起,Oracle 為我們提供了 fetch bulk collect 來批量取游標中的數(shù)據(jù)。它能在讀取游標中大量數(shù)據(jù)的時候提高效率,就像 SNMP 協(xié)議中,V2 版比 V1 版新加了 GET-BULK PDU 一樣,也是用來更高效的批量取設備上的節(jié)點值。 fetch bulk collect into 的使用格式是:fetch some_cursor collect into col1, col2 limit xxx。col1、col2 是聲明的集合類型變量,xxx 為每次取數(shù)據(jù)塊的大小(記錄數(shù)),相當于緩沖區(qū)的大小,可以不指定 limit xxx 大小。下面以實際的例子來說明它的使用,并與逐條取記錄的 fetch into 執(zhí)行效率上進行比較。測試環(huán)境是 Oracle 10g 10.2.1.0,查詢的聯(lián)系人表 sr_contacts 中有記錄數(shù) 1802983 條,游標中以 rownum 限定返回的記錄數(shù)。