Oracle 10g中用FIRALL处理非连续数组
2007-05-06 12:06:52 来源:WEB开发网核心提示:在PL/SQL循环中执行数据操作语言(DML)是一件费时的工作,因为每次循环都要由PL/SQL引擎转向SQL引擎,Oracle 10g中用FIRALL处理非连续数组,应用FORALL是一个更好的方法,它一次性向SQL语句提交一组临时值,VALUES OF子句结合这组索引对表中的每个部门进行INSERT语句处理,(这只是
在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;
列表A中是一个应用HR样本模式的例子。我将部门名称加载到内存中的一个嵌套表内,然后在里面搜索与IT有关的部门。每搜索到一个,我保存它的表输入项索引。VALUES OF子句结合这组索引对表中的每个部门进行INSERT语句处理。(这只是一个示例;用一个单独的SQL语句也可以进行同样的处理。)列表B中是输出结果。
- ››oracle 恢复误删除的表和误更新的表
- ››Oracle分页查询排序数据重复问题
- ››Oracle创建dblink报错:ORA-01017、ORA-02063解决
- ››Oracle 提高SQL执行效率的方法
- ››Oracle 动态查询,EXECUTE IMMEDIATE select into...
- ››Oracle 11g必须开启的服务及服务详细介绍
- ››oracle性能34条优化技巧
- ››oracle数据库生成随机数的函数
- ››Oracle 数据库表空间容量调整脚本
- ››oracle单库彻底删除干净的方法
- ››Oracle创建表空间、创建用户以及授权、查看权限
- ››oracle 中 UPDATE nowait 的使用方法
赞助商链接