PL/SQL 记录集合IS TABLE OF的使用
在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
PL/SQL 记录集合IS TABLE OF的使用的更多相关文章
- Oracle pl/sql 记录、表类型
一.PL/SQL记录 定义: TYPE <类型名> IS RECORD <列名1 类型1,列名2 类型2,...列名n 类型n,> [NOT NULL] <列的类型> ...
- PL/SQL 记录 Record 简介
记录类型是表中当行数据结构的一个镜像.每个记录只存储一行数据,记录包含的是字段,而不是列. 1.用%rowtype属性隐式定义记录类型 declare individual individuals%r ...
- 20181017 PL/SQL 记录
1. 配置DB 链接文件,帮助中找到tnsnames.ora文件路径,进行注册数据库信息,登陆即可. 这只是个客户端,具体服务器段数据库情况不清楚. 2.写法区别PL/SQL 和SQL 变量定义 赋值 ...
- 【软件使用技巧】PL/SQL Developer实现双击table询
二手plsql都知道,在表名默认双击[开展/关闭]. 习惯了MySql Workbench要么Sqlserver Management Studio无法适应其他管理工具. 直接在溶液: Tools - ...
- PL/SQL Developer实现双击table表名查询
双击table默认为Expand/Collapse 展开/折叠 有时需快速查看该表数据,如果写select * from tab会显得麻烦, 我们可实现双击table来进行快速查询 方法为:Tools ...
- PL/SQL — 显式游标
一.游标的相关概念及特性 1.定义 通过游标方式定位到结果集中某个特定的行,然后根据业务需求对该行进行相应特定的操作. 2.分类 显示游标: 用户自定义游标,用于处理select语句返回的多行数据. ...
- PL/SQL --> 动态SQL调用包中函数或过程
动态SQL主要是用于针对不同的条件或查询任务来生成不同的SQL语句.最常用的方法是直接使用EXECUTE IMMEDIATE来执行动态SQL语句字符串或字符串变量.但是对于系统自定义的包或用户自定的包 ...
- PL/SQL游标详解
刚打开游标的时候,是位于一个空行,要用fetch into 才能到第一行. 只是要注意用更新游标的时候,不能在游标期间commit. 否则会报ORA-01002: fetch out of seque ...
- pl/sql的介绍
为什么需要pl/sql编程? 因为使用纯的sql语句来操作数据库,有先天性的技术缺陷: 1.不能模块编程: 2.执行速度慢: 3.安全性有问题: 4.浪费带宽. pl/sql是什么? pl/sql(p ...
随机推荐
- CentOS中JAVA_HOME的环境变量设置
http://blog.csdn.net/wind520/article/details/9308809 运行Java应用的时候,提示无法找到JAVA_HOME,查询java -version [ji ...
- I2C总线之(三)---以C语言理解IIC
为了加深对I2C总线的理解,用C语言模拟IIC总线,边看源代码边读波形: 如下图所示的写操作的时序图: 读时序的理解同理.对于时序不理解的朋友请参考“I2C总线之(二)---时序” 完整的程序如下: ...
- 【HDOJ】1924 CIVIC DILL MIX
简单字符串. #include <cstdio> #include <cstring> #define MAXN 55 char srca[MAXN], cas[MAXN], ...
- vs默认的app.config是哪个?
一:这次是进一步的三层构架,不过还是没有业务逻辑层,但有单独的层的文件夹,解决方案资源管理器图如下: 二:operatorDAl.cs代码: using System; using System.Co ...
- Linux学习笔记27——共享内存
一 共享内存 共享内存是由IPC为进程创建的一个特殊的地址范围,它将出现在该进程的地址空间中.其他进程可以将同一段共享内存连接到它们自己的地址空间中,所有进程都可以访问共享内存中的地址.如果某个进程向 ...
- VS2010 快速写入注释小技巧
/************************************************************************//* *//******************* ...
- Leetcode那点事儿
1 .Two Sum 2.Add Two Numbers 3.Longest Substring Without Repeating Characters 7.Reverse Integer 26. ...
- poj 2505 A multiplication game(博弈)
A multiplication game Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 5622 Accepted: ...
- 开源sip server & sip client 和开发库 一览
http://www.voip-info.org/wiki/view/Open+Source+VOIP+Software http://blog.csdn.net/xuyunzhang/article ...
- 20个 Unix/Linux 命令技巧
让我们用这些Unix/Linux命令技巧开启新的一年,提高在终端下的生产力.我已经找了很久了,现在就与你们分享. 删除一个大文件 我在生产服务器上有一个很大的200GB的日志文件需要删除.我的rm和l ...