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 ...
随机推荐
- [BZOJ 1733] [Usaco2005 feb] Secret Milking Machine 【二分 + 最大流】
题目链接:BZOJ - 1733 题目分析 直接二分这个最大边的边权,然后用最大流判断是否可以有 T 的流量. 代码 #include <iostream> #include <cs ...
- Spring 操作Weblogic JDNI数据源
<!--Data Source--> <jee:jndi-lookup id="nssb_1122_cs" jndi-name="jdbc/nssb_1 ...
- 如何监控 Nginx?
什么是 Nginx? Nginx("engine-x")是一个 HTTP 和反向代理服务器,同时也是一个邮件代理服务器和通用的 TCP 代理服务器.作为一个免费开源的服务器,Ngi ...
- Jinja2学习笔记暨官方文档的翻译
http://blog.csdn.net/lgg201/article/details/4647471 呵呵, 刚刚看完Python模板引擎Jinja2的文档, 感觉很好, 觉得动态语言真是很好. ...
- windows 版Tomcat 7.0的配置
http://hi.baidu.com/liguohei/item/d6ea23ff904f98753d198b24 测试成功,截图 ~~~~~~~~~~~~~~~ 一.安装JDK 1.7 1.添加环 ...
- [spring-framework]Spring定时器的配置和使用
开发中我们常常会做一些定时任务,这些任务有开始时间,并会按一定的周期或规则执行.如此我们在Java程序开发中使用定时器来处理定时任务. <!-- MessageRequestTask类中包含了m ...
- java基础(十)面向对象(五)
这里有我之前上课总结的一些知识点以及代码大部分是老师讲的笔记 个人认为是非常好的,,也是比较经典的内容,真诚的希望这些对于那些想学习的人有所帮助! 由于代码是分模块的上传非常的不便.也比较多,讲的也是 ...
- Hibernate(四)基本映射
映射的概念 在上次的博文Hibernate(三)Hibernate 配置文件我们已经讲解了一下 Hibernate中的两种配置文件,其中提到了两种配置文件的主要区别就是XML可以配置映射.这里提到的映 ...
- Windows下父进程监视子进程状态
最近研究自动化测试,需要获取程序的运行状态及结果,下面是些参考资料. 原文地址:http://blog.csdn.net/ariesjzj/article/details/7226443 Linux下 ...
- 解放程序猿宝贵的右手(或者是左手) ——Android自动化测试技巧
解放双手--Android自动化测试 - eclipse_xu - 博客频道 - CSDN.NET 解放程序猿宝贵的右手(或者是左手) --Android自动化测试技巧