Oracle 10g中用FORALL处理非连续数组
2009-10-11 13:10
183 查看
在PL/SQL循环中执行数据操作语言(DML)是一件费时的工作,因为每次循环都要由PL/SQL引擎转向SQL引擎。应用FORALL是一个更好的方法,它一次性向SQL语句提交一组临时值。
在Oracle 10g前,FORALL语句的语法只能处理连续性的数组元素:
这意味着:在以前,使用FORALL的嵌套表不能删除待处理数组中间的元素,而且数组项必须进行连续处理。Oracle 10g解决了这两方面的问题,并增加了INDICES OF和VALUES OF子句。
INDICES OF子句替代lower_bound ..upper_bound,说明所有要处理的有效索引值,即使这些值之间存在间隔。就像是这样:
您仍然可以应用BETWEEN语法限制要处理的范围,这是一个可选的内容。
VALUES OF子句帮助您以不同顺序处理主要的集合。您再建立另一个集合,其中只包含您要处理的索引号码,这些号码以您希望处理的顺序排列。然后该语句变为:
列表A中是一个应用HR样本模式的例子。我将部门名称加载到内存中的一个嵌套表内,然后在里面搜索与IT有关的部门。每搜索到一个,我保存它的表输入项索引。VALUES OF子句结合这组索引对表中的每个部门进行INSERT语句处理。(这只是一个示例;用一个单独的SQL语句也可以进行同样的处理。)列表B中是输出结果。
在Oracle 10g前,FORALL语句的语法只能处理连续性的数组元素:
FORALL index_name IN lower_bound ..upper_bound sql_statement; |
INDICES OF子句替代lower_bound ..upper_bound,说明所有要处理的有效索引值,即使这些值之间存在间隔。就像是这样:
FORALL index_name IN INDICES OF collection_name BETWEEN lower_bound AND upper_bound sql_statement; |
VALUES OF子句帮助您以不同顺序处理主要的集合。您再建立另一个集合,其中只包含您要处理的索引号码,这些号码以您希望处理的顺序排列。然后该语句变为:
FORALL index_name IN VALUES OF index_collection sql_statement; |
相关文章推荐
- oracle 10g 实例用localhost无法访问的处理
- 通过OCI 处理 Oracle 10g 中处理Clob大字段写入
- Linux下安装oracle 10g 时环境检测 DHCP错误的处理
- 图像处理 之 统计数组中连续0/1的个数
- forall oracle 10g 高级特性
- oracle 10g 实例用localhost无法访问的处理
- Oracle 10g 中误删除(drop)表的恢复处理
- oracle 10g中首选身份证明登陆的处理
- Oracle 10g DBCA建库四个选项的区别------ 一般用途 事务处理 定制数据库数据仓库
- •连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组; •长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。
- Oracle 10g 监听hang处理
- oracle 10g中首选身份证明登陆的处理
- oracle 10g中首选身份证明登陆的处理(win2003下)
- 2.•连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组; •长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。
- oracle 10g的long类型处理bug
- oracle基础三 与长字符串根据操作符分割成数组处理函数
- case when 逻辑处理 oracle 10g
- Oracle 10g复合数据类型pl/sql集合学习六——索引表、嵌套表、变长数组
- oracle 10g字符串分割处理
- 查找ORACLE出现“ORA-08177:无法连续访问此事务处理”问题的原因