批量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的更多相关文章

  1. PL/SQL --> 动态SQL调用包中函数或过程

    动态SQL主要是用于针对不同的条件或查询任务来生成不同的SQL语句.最常用的方法是直接使用EXECUTE IMMEDIATE来执行动态SQL语句字符串或字符串变量.但是对于系统自定义的包或用户自定的包 ...

  2. Oracle批量SQL之 BULK COLLECT 子句

    BULK COLLECT 子句会批量检索结果,即一次性将结果集绑定到一个集合变量中,并从SQL引擎发送到PL/SQL引擎.通常可以在SELECT INTO.FETCH INTO以及RETURNING ...

  3. 【转】MySQL批量SQL插入各种性能优化

    原文:http://mp.weixin.qq.com/s?__biz=MzA5MzY4NTQwMA==&mid=403182899&idx=1&sn=74edf28b0bd29 ...

  4. SQL批量更新数据库中所有用户数据表中字段类型为tinyint为int

    --SQL批量更新数据库中所有用户数据表中字段类型为tinyint为int --关键说明:--1.从系统表syscolumns中的查询所有xtype='48'的记录得到类型为[tinyint]的字段- ...

  5. SQL批量添加主键脚本

    --SQL批量添加主键脚本 --操作提示:运行此脚本前请记得备份您要操作的数据库 --实现功能:执行脚本后数据库中的所有数据表都会有一个主键 --添加规则1:主键名称为ID(可自己修改),数据类型为整 ...

  6. 利用sql批量删除表,存储过程

    利用sql批量删除表,存储过程. 最近用godaddy的空间,由于系统里面的表多,一个个的删除很麻烦,就网上搜集了一下解决方法. 给大家分享一下: 1.批量删除存储过程 declare @procNa ...

  7. SQL批量信息保存(XML格式字符串数据)

    /* *功能:SQL批量信息录入 *此存储过程获取表单信息,插入表中.*/CREATE  PROC [dbo].[sp_SaveToMX1]@XML text   --明细表XML字符串信息ASBEG ...

  8. 可遇不可求的Question之MySql4.0前版本不支持union与批量SQL提交

    批量SQL提交 参考 21.2.6. Connector/NET Connection String Options Reference . Allow Batch true When true, m ...

  9. SQL批量更新数据

    SQL批量更新数据 step1:导入Excel数据, 具体见百度.注意点:一列中含有float型数据和文本数据的时候,导入要将Excel中的表格属性改成文本,或在数字项目前加个单引号.   step2 ...

随机推荐

  1. 如何监控 Nginx?

    什么是 Nginx? Nginx("engine-x")是一个 HTTP 和反向代理服务器,同时也是一个邮件代理服务器和通用的 TCP 代理服务器.作为一个免费开源的服务器,Ngi ...

  2. 要将PYTHON应用于工作啦

    分析同事在线答疑的数据,考评模型还未最终给出: import time import sys import optparse #操作代码和同事名对应的文件 opfile = 'op_name.txt' ...

  3. Hibernate之SchemaExport+配置文件生成表结构

    首先要生成表,得先有实体类,以Person.java为例: /** * * @author Administrator * @hibernate.class table="T_Person& ...

  4. Android应用--新浪微博客户端新特性滚动视图和启动界面实现

    新浪微博客户端新特性滚动视图和启动界面实现 2013年8月20日新浪微博客户端开发之启动界面实现 前言: 使用过新浪微博客户端的童鞋都清楚,客户端每一次升级之后第一次启动界面就会有新特性的介绍,用户通 ...

  5. HDU 5914 Triangle 【构造】 (2016中国大学生程序设计竞赛(长春))

    Triangle Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Su ...

  6. nginx简单双机热备:backup参数的使用

    nginx简单双机热备:backup参数的使用 nginx简单双机热备:backup参数的使用

  7. Redis教程01——命令

    APPEND key value追加一个值到key上 AUTH password验证服务器 BGREWRITEAOF 异步重写追加文件 BGSAVE 异步保存数据集到磁盘上 BITCOUNT key ...

  8. 通过例子学python(1)

    第一章 基础知识 1.4 数字和表达式 # -*- coding: cp936 -*- # 1.4 数字和表达式 # ** 表示幂(乘方)运算 #1.4.1 长整型数 print(9999999999 ...

  9. Tomcat8 配置NIO

    conf/server.xml 打开:<Executor name="tomcatThreadPool" namePrefix="catalina-exec-&qu ...

  10. 【Android - MD】之RecyclerView的使用

    RecyclerView是Android 5.0新特性--Material Design中的一个控件,它将ListView.GridView整合到一起,可以使用极少的代码在ListView.GridV ...