Chinaunix首页 | 论坛 | 博客
  • 博客访问: 103255799
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: Oracle

2008-05-22 17:33:35

  来源:

在PL/SQL循环中执行数据操作语言(DML)是一件费时的,因为每次循环都要由PL/SQL引擎转向SQL引擎。应用FORALL是一个更好的方法,它一次性向SQL语句提交一组临时值。

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

FORALL index_name IN lower_bound ..upper_bound sql_statement;

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

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

FORALL index_name IN INDICES OF collection_name

    BETWEEN lower_bound AND upper_bound

    sql_statement;

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

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

FORALL index_name IN VALUES OF index_collection

    sql_statement;
阅读(521) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~