PL/SQL 批量SQL
批量SQL包括:
FORALL语句
BULK COLLECT子句
FORALL语句
FORALL具有如下结构:
FORALL loop_counter IN bounds_clause [SAVE ECEPTIONS]
SQL_STATEMENT;
其中, bounds_clause是下面形式之一:
lower_limit .. upper_limit
INDICES OF collection_name [BETWEEN lower_limit .. upper_limit]
VALUES OF collection_name
第一种与for循环一样。
第二种用于稀疏数组,比如一个嵌套表,删除了其中某几项,遍历时会自动跳过执行语句。
第三种同样用于数组,但不是稀疏的,因此当VALUES OF 子句所引用的集合是空的,FORALL语句会导致异常。
另外,如果VALUES OF使用的是联合数组(即类似于Hashtable),必须是使用PLS_INTEGER或BINARY_INTEGER进行索引。VALUES OF的集合元素必须是PLS_INTEGER或BINARY_INTEGER。
SAVE EXCEPTIONS
如果在当前对应的SQL语句执行出现异常的情况下仍希望继续执行,那么需要添加SAVE EXCEPTIONS关键字。这些异常被存储在名为SQL%BULK_EXCEPTIONS的游标属性中。SQL%BULK_EXCEPTIONS是个记录集合,其中每个记录都有两个字段,ERROR_INDEX和ERROR_CODE。ERROR_INDEX表示出错的语句在FORALL中的迭代编号,ERROR_CODE会存储对应于所抛出的异常的ORACLE错误代码。为了获取异常信息,可用SQLERRM函数,传入ERROR_CODE即可。注意传入时,会添加一个负号作为前缀。
BULK COLLECT子句
BULK COLLECT 类似于游标循环,用上BULK COLLECT可用于批量SELECT INTO 和 FETCH INTO(SELECT * BULK COLLECT INTO 或 SELECT * BULK COLLECT INTO)。同时,当不返回任何数据时,不会抛出NO_DATA_FOUND的异常,因此,有必要判断返回的集合是否包含数据(COUNT是否为0)。
由于 BULK_COLLECT子句不会限制集合的尺寸,并能自动扩展。因此当SELECT语句返回大量数据时,最好限制结果集的大小。通过LIMIT选项可以实现这个目标。
PL/SQL 批量SQL的更多相关文章
- PL/SQL --> 动态SQL调用包中函数或过程
动态SQL主要是用于针对不同的条件或查询任务来生成不同的SQL语句.最常用的方法是直接使用EXECUTE IMMEDIATE来执行动态SQL语句字符串或字符串变量.但是对于系统自定义的包或用户自定的包 ...
- Oracle批量SQL之 BULK COLLECT 子句
BULK COLLECT 子句会批量检索结果,即一次性将结果集绑定到一个集合变量中,并从SQL引擎发送到PL/SQL引擎.通常可以在SELECT INTO.FETCH INTO以及RETURNING ...
- 【转】MySQL批量SQL插入各种性能优化
原文:http://mp.weixin.qq.com/s?__biz=MzA5MzY4NTQwMA==&mid=403182899&idx=1&sn=74edf28b0bd29 ...
- SQL批量更新数据库中所有用户数据表中字段类型为tinyint为int
--SQL批量更新数据库中所有用户数据表中字段类型为tinyint为int --关键说明:--1.从系统表syscolumns中的查询所有xtype='48'的记录得到类型为[tinyint]的字段- ...
- SQL批量添加主键脚本
--SQL批量添加主键脚本 --操作提示:运行此脚本前请记得备份您要操作的数据库 --实现功能:执行脚本后数据库中的所有数据表都会有一个主键 --添加规则1:主键名称为ID(可自己修改),数据类型为整 ...
- 利用sql批量删除表,存储过程
利用sql批量删除表,存储过程. 最近用godaddy的空间,由于系统里面的表多,一个个的删除很麻烦,就网上搜集了一下解决方法. 给大家分享一下: 1.批量删除存储过程 declare @procNa ...
- SQL批量信息保存(XML格式字符串数据)
/* *功能:SQL批量信息录入 *此存储过程获取表单信息,插入表中.*/CREATE PROC [dbo].[sp_SaveToMX1]@XML text --明细表XML字符串信息ASBEG ...
- 可遇不可求的Question之MySql4.0前版本不支持union与批量SQL提交
批量SQL提交 参考 21.2.6. Connector/NET Connection String Options Reference . Allow Batch true When true, m ...
- SQL批量更新数据
SQL批量更新数据 step1:导入Excel数据, 具体见百度.注意点:一列中含有float型数据和文本数据的时候,导入要将Excel中的表格属性改成文本,或在数字项目前加个单引号. step2 ...
随机推荐
- 最牛「CSRF防护」,带你进入大虾们的圈子!
简单理解 CSRF 什么是 CSRF? CSRF,通常称为跨站请求伪造,英文名 Cross-site request forgery 缩写 CSRF,是一种对网站的恶意攻击.一个跨站请求伪造攻击迫使登 ...
- spring定时任务的配置使用
spring的定时任务配置分为三个步骤: 1.定义任务 2.任务执行策略配置 3.启动任务 1.定义任务 <!--要定时执行的方法--> <bean id="testTas ...
- 安装drupal练习网站遇到的问题
1 Skip #conjunction key in __clone() method of core/includes/database/query.inc 解决方案:https://www.dru ...
- lr 和 Qtp 视频连接
http://blog.sina.com.cn/s/blog_7085382f01012ysn.html
- php正则常用表达式
[]里的.相当于\. 涉及到换行一般考虑用模式修正符s s (PCRE_DOTALL) 如果设置了这个修饰符, 模式中的点号元字符匹配所有字符, 包含换行符. 如果没有这个 修饰符, 点号不匹配换行符 ...
- mysql 学习(1)
1.从图中看到mysql是客户服务器模式. 2.我们如何操纵数据库? a.直接sql,各种编程语言, 3.客户端和服务器如何通信呢? 凡是c/s模式的都会自己的协议,但是都是基于TCP/IP协议,在l ...
- 初学scala2——case class
case class,样例类,有人也叫条件类. 例如: case class Person(name:String, age:Int) 好用之处: 1.新建类实例不用new Person(..),直接 ...
- android生成二维码
新建项目 布局截图如下(一个输入框,一个按钮,一个imageview),输入想要的东西(文字,数字,网站链接等)然后点击按钮生成二维码,然后可以扫描识别. 首先需要一个谷歌的一个jar包 activi ...
- javascript 的点击复制事件
function copy() { var text=document.getElementById("txtUser").value; if(copy2Clipboard(tex ...
- UVaLive2572 poj1418 UVa1308 Viva Confetti
一次放下n个圆 问最终可见的圆的数量 应该是比较经典的问题吧 考虑一个圆与其他每个圆的交点O(n)个 将其割成了O(n)条弧 那么看每条弧的中点 分别向内向外调动eps这个点 则最上面的覆盖这个点的圆 ...