PL/SQL 記錄集合IS TABLE OF的使用


在PL/SQL代碼塊中使用select into 賦值的話,有可能返回的是一個結果集。此時,如果使用基本類型或自定義的記錄類型,將會報錯。

因此,需要定義一個變量,是某種類型的集合。下面以一個基於表的行類型的集合為例簡單介紹一下(相信基本類型同理吧)。

 1 DECLARE
 2    CURSOR cur_tx IS  SELECT GKEY from t ;
 3     SUBTYPE  TX_TYPE IS t%ROWTYPE ; -- 定義類型
 4     TYPE TX_TAB IS TABLE OF TX_TYPE;--定義新類型,是某個類型的集合
 5     K t.GKEY%TYPE;
 6     V_Tx TX_TAB:=TX_TAB();--使用時應實例化,否則報錯
 7 BEGIN
 8    OPEN CUR_TX;
 9    FETCH CUR_TX INTO K;
10     SELECT * BULK COLLECT INTO V_Tx FROM t WHERE gkey=K; --返回結果集
11    FORALL x in V_Tx.first .. V_Tx.last--遍歷操作
12           -- statement;      
13    CLOSE CUR_TX;
14 END;  

集合類型要用IS TABLE OF來定義,表示是一個集合。

/*在使用時,一定要實例化,否則報錯:local collection types not allowed in SQL statements. 還表示collection type應該是schema級的才能使用。*/

(注:經檢查,與實例化無關,與select into時要使用bulk collect 有關)

當然也可以使用游標,將結果集放在游標中。這里只是提供另一種思路。

這里提到了BULK COLLECT和FORALL 批量綁定檢索。

FORALL與BULK COLLECT的使用方法: 
1.使用FORALL比FOR效率高,因為前者只切換一次上下文,而后者將是在循環次數一樣多個上下文間切換。 

2.使用BLUK COLLECT一次取出一個數據集合,比用游標條取數據效率高,尤其是在網絡不大好的情況下。但BLUK COLLECT需要大量內存,因此最好確保每次取出的記錄不會很多。 

參考:http://log-cd.iteye.com/blog/411122

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM