博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PL/SQL 记录集合IS TABLE OF的使用
阅读量:4155 次
发布时间:2019-05-25

本文共 952 字,大约阅读时间需要 3 分钟。

在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://jewxi.baihongyu.com/

你可能感兴趣的文章
Observer模式
查看>>
高性能服务器设计
查看>>
性能扩展问题要趁早
查看>>
MySQL-数据库、数据表结构操作(SQL)
查看>>
OpenLDAP for Windows 安装手册(2.4.26版)
查看>>
图文介绍openLDAP在windows上的安装配置
查看>>
Pentaho BI开源报表系统
查看>>
Pentaho 开发: 在eclipse中构建Pentaho BI Server工程
查看>>
JSP的内置对象及方法
查看>>
android中SharedPreferences的简单例子
查看>>
android中使用TextView来显示某个网址的内容,使用<ScrollView>来生成下拉列表框
查看>>
andorid里关于wifi的分析
查看>>
Spring MVC和Struts2的比较
查看>>
Hibernate和IBatis对比
查看>>
Spring MVC 教程,快速入门,深入分析
查看>>
Android 的source (需安装 git repo)
查看>>
LOCAL_PRELINK_MODULE和prelink-linux-arm.map
查看>>
Simple Guide to use the gdb tool in Android environment
查看>>
Netconsole to capture the log
查看>>
Build GingerBread on 32 bit machine.
查看>>