- 0
- 0
- 约 29页
- 2016-08-22 发布于河南
- 举报
第18章 批量SQL
第18章 批 量 SQL 本章目标 掌握FORALL语句的用法 掌握BULK COLLECT子句的用法 批量SQL 基本概念 PL/SQL与SQL引擎之间的通信称为上下文切换。 批量SQL就是对SQL语句及其结果进行批量处理。 优点 减少上下文切换 降低性能负载 显著提升性能 18.1 FORALL语句 例如, FOR i in 1..10 LOOP INSERT INTO table_name VALUES(…); END LOOP; 说明:这个FOR循环会10迭次代执行INSERT语句,产生 10次的上下文切换。 因此,引入FORALL语句对SQL语句进行批量处理。 18.1 FORALL语句 功能 从PL/SQL引擎向SQL引擎批量发送INSERT、UPDATE或者DELETE语句,而不是每次发送一条语句。 语法 FORALL loop_counter IN bounds_clause [ SAVE EXCEPTIONS ] SQL_STATEMENT ; 其中, loop_counter ,隐式定义的循环计数器变量。 SQL_STATEMENT ,引用一个或多个集合的静态或动态的INSERT、UPDATE或者DELETE语句。 SAVE EXCEPTIONS ,当SQL_STATEMENT 产生异常时,能够保证FORALL语句继续执行。 18.1 FORALL语句 bounds_clause ,控制循环计数器变量的值。 三种形式: lower_limit .. upper_limit 用于指定循环计数器的上限和下限 INDICES OF collection_name [ BETWEEN lower_limit .. Upper_limit ] 用于引用特定集合中单个元素的下标 VALUES OF collection_name 用于引用特定集合中单个元素的值 【例18-1】使用FORALL语句 【例18-2】分析批量SQL对性能的改进 1、SAVE EXCEPTIONS 选项 例如, FORALL i IN 1..10 SAVE EXCEPTIONS INSERT INTO test VALUES … 功能 当对应的SQL语句导致异常时,FORALL语句仍旧能够继续执行。 这些异常被存储在SQL%BULK_EXCEPTIONS游标属性中。 1、SAVE EXCEPTIONS 选项 SQL%BULK_EXCEPTIONS属性 它是个记录集合,其中每个记录由两个字段组成:ERROR_INDEX和ERROR_CODE。 ERROR_INDEX存储发生异常的FORALL语句的迭代编号 ERROR_CODE存储对应与所抛出异常的Oracle错误代码 可以使用SQL%BULK_EXCEPTIONS.COUNT检索FORALL语句执行过程中发生的异常数量。 可以使用SQLERRM函数查询错误消息。 【例18-3】使用SAVE EXCEPTION选项 2、INDICES OF 选项 例如, FORALL i IN INDICES OF row_num_tab INSERT INTO test VALUES … 功能 使用INDICES OF选项,可以循环处理稀疏的集合。 【例18-4】使用INDICES OF选项 3、VALUES OF 选项 例如, FORALL i IN VALUES OF exc_ind_tab INSERT INTO test_exc VALUES … 功能 使用VALUES OF选项,可以指明FORALL语句中循环计数器的值来自于所指定集合中元素的值。 这个集合是FORALL语句循环处理的一组索引值。这些索引值未必是唯一的,并且可以按照任意顺序列出。 3、VALUES OF 选项 使用 VALUES OF 选项的限制: 如果 VALUES OF 子句中使用的集合是联合数组,该联合数组必须使用PLS_INTEGER或BINARY_INTEGER进行索引; VALUES OF 子句中所使用集合的元素必须是PLS_INTEGER或BINARY_INTEGER; 当 VALUES OF 子句所引用的集合是空时,FORALL 语句会导致异常。 【例18-5】使用VALUES OF选项 18.2 BULK COLLECT 子句 功能 批量检索结果,并从SQL引擎发送到PL/SQL引擎。 【回顾】使用游标返回emp表中的雇员的编号、姓名。 【例18-6】使用BULK COLLECT子句 18.2 BULK COLLECT 子句 如何限制批量检索数据集的尺寸? 1、声明显式游标; 2、在游标循环中使用
原创力文档

文档评论(0)