在PL/SQL代码块中使用select into 赋值的话,有可能返回的是一个结果集。此时,如果使用基本类型或自定义的记录类型,将会报错。

因此,需要定义一个变量,是某种类型的集合。下面以一个基于表的行类型的集合为例简单介绍一下(相信基本类型同理吧)。

 DECLARE
CURSOR cur_tx IS SELECT GKEY from t ;
SUBTYPE TX_TYPE IS t%ROWTYPE ; -- 定义类型
TYPE TX_TAB IS TABLE OF TX_TYPE;--定义新类型,是某个类型的集合
K t.GKEY%TYPE;
V_Tx TX_TAB:=TX_TAB();--使用时应实例化,否则报错
BEGIN
OPEN CUR_TX;
FETCH CUR_TX INTO K;
SELECT * BULK COLLECT INTO V_Tx FROM t WHERE gkey=K; --返回结果集
FORALL x in V_Tx.first .. V_Tx.last--遍历操作
-- statement;
CLOSE CUR_TX;
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

最新文章

  1. Java多线程开发系列之番外篇:事件派发线程---EventDispatchThread
  2. java在cmd下编译和执行引用jar的类
  3. Zookeeper安装,Zookeeper单机模式安装
  4. css-a与a:link的一些认识
  5. PL/0与Pascal-S编译器程序详细注释
  6. 容联云通讯_提供网络通话、视频通话、视频会议、云呼叫中心、IM等融合通讯能力开放平台。
  7. linux 安装mysql数据库
  8. springboot 项目maven 打包错误
  9. 无法运行 vue-manage-system@3.1.0 dev: `webpack-dev-server --inline --progress --
  10. input range样式优化
  11. rabbitmq的安装与使用
  12. 打印 laravel 模型查询产品的 SQL
  13. loadrunner 运行脚本-Run-time Settings-Browser Enmulation设置详解
  14. 如何提交内核补丁--checkpatch.pl使用【转】
  15. 【转】TCP三次握手和四次挥手全过程及为什么要三次握手解答
  16. Spring boot 自定义starter
  17. 设置pip的默认源
  18. OpenGL中的帧缓存
  19. 【Multiple backgrounds】用CSS3实现网页多重背景
  20. 原型链继承中的prototype、__proto__和constructor的关系

热门文章

  1. 去除UINavigationBar默认透明度的方法
  2. list.h
  3. JENKINS的远程API调用,然后用PYTHON解析出最新的版本及稳定成功的版本
  4. 3.2 java中堆栈(stack)和堆(heap)(还在问静态变量放哪里,局部变量放哪里,静态区在哪里.....进来)
  5. innodb_buffer_pool_instances and innodb_buffer_pool_size的关系
  6. wcf托管在IIS上,提示未能加载
  7. WordPress wp-includes/functions.php脚本远程任意代码执行漏洞
  8. ♫【模式】Curry化
  9. DSP知识
  10. HDOJ/HDU 1062 Text Reverse(字符串翻转~)