龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 数据库类 > Oracle 技术 >

Oracle 10g中如何应用FORALL理非连续数组

时间:2011-04-12 23:18来源:未知 作者:admin 点击:
分享到:
在Oracle 10g中应用FORALL可以一次性向SQL语句提交一组临时值,从而提高了PL/SQL循环中执行数据操作语言(DML)的效率。 但在10g前,FORALL语句的语法只能处理连续性的数组元素: FORALLindex_n

在Oracle 10g中应用FORALL可以一次性向SQL语句提交一组临时值,从而提高了PL/SQL循环中执行数据操作语言(DML)的效率。

但在10g前,FORALL语句的语法只能处理连续性的数组元素:

  1. FORALL index_name IN lower_bound ..upper_bound sql_statement;  

这意味着:在以前,应用FORALL的嵌套表不能删除待处理数组中间的元素,而且数组项必须进行连续处理。Oracle 10g解决了这两方面的问题,并增加了INDICES OF和VALUES OF子句。

INDICES OF子句替代lower_bound ..upper_bound,说明所有要处理的有效索引值,即使这些值之间存在间隔。就像是这样:

  1. FORALL index_name IN INDICES OF collection_name  
  2. BETWEEN lower_bound AND upper_bound  
  3. sql_statement;  
  4.  

您仍然可以应用BETWEEN语法限制要处理的范围,这是一个可选的内容。

VALUES OF子句帮助您以不同顺序处理主要的集合。您再建立另一个集合,其中只包含您要处理的索引号码,这些号码以您希望处理的顺序排列。然后该语句变为: 

  1. FORALL index_name IN VALUES OF index_collection  
  2. sql_statement;  
  3.  

列表A中是一个应用HR样本模式的例子。我将部门名称加载到内存中的一个嵌套表内,然后在里面搜索与IT有关的部门。每搜索到一个,我保存它的表输入项索引。VALUES OF子句结合这组索引对表中的每个部门进行INSERT语句处理。(这只是一个示例;用一个单独的SQL语句也可以进行同样的处理。)列表B中是输出结果。

以上就Oracle 10g中如何应用FORALL处理非连续数组做了简单概述,要想了解的更多相关问题的解决方案,请留意51cto.com站上的相关论坛。

  1. 修改Oracle存储过程所需代码
  2. 对Oracle存储过程的总结 
  3. 实现Oracle存储过程的实际应用的代码
  4. 深入高性能的Oracle动态SQL开发
  5. Oracle SQL的优化规则解析
精彩图集

赞助商链接