关闭

集合类型要用IS TABLE OF来定义,表示是一个集合。

455人阅读 评论(0) 收藏 举报
分类:

在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需要大量内存,因此最好确保每次取出的记录不会很多。 

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:1337次
    • 积分:62
    • 等级:
    • 排名:千里之外
    • 原创:3篇
    • 转载:11篇
    • 译文:0篇
    • 评论:0条
    文章分类