FORALL中的values of和indices of的区别

来源:互联网 发布:ios11数据开关怎么设置 编辑:程序博客网 时间:2024/05/16 12:23

forall values in values of collection:就是从集合中迭代存储的元素值,循环体内直接使用values就是元素值了,一般用于嵌套集合。

forall indxes in indices of collection:迭代的不是元素值,是元素在集合中的索引值。通过collection(indxes)得到集合的值,10g新增可以访问非连续集合。


--indices ofDECLARETYPE ID_TABLE_TYPE IS TABLE OF NUMBER(6);--嵌套表ID_TABLE ID_TABLE_TYPE;BEGINID_TABLE:=ID_TABLE_TYPE(1,NULL,3,NULL,5);--构造初始化FORALL I IN INDICES OF ID_TABLEDELETE FROM DEMO WHERE ID=ID_TABLE(I);END; --VALUES OFCREATE TABLE NEW_DEMO AS SELECT * FROM DEMO WHERE 1=0;DECLARETYPE ID_TABLE_TYPE IS TABLE OF DEMO.ID%TYPE;TYPE NAME_TABLE_TYPE IS TABLE OF DEMO.NAME%TYPE;NAME_TABLE NAME_TABLE_TYPE;ID_TABLE ID_TABLE_TYPE;TYPE INDEX_POINTER_TYPE IS TABLE OF PLS_INTEGER;INDEX_POINTER INDEX_POINTER_TYPE;BEGINSELECT * BULK COLLECT INTO ID_TABLE,NAME_TABLE FROM DEMO;INDEX_POINTER:=INDEX_POINTER_TYPE(6,8,10);FORALL I IN VALUES OF INDEX_POINTERINSERT INTO NEW_DEMO VALUES(ID_TABLE(I),NAME_TABLE(I));END;

对bulk collect作个小小解析:
通过bulk collect减少loop处理的开销,使用Bulk Collect提高Oracle查询效率

Oracle8i中首次引入了Bulk Collect特性,该特性可以让我们在PL/SQL中能使用批查询,批查询在某些情况下能显著提高查询效率。
采用bulk collect可以将查询结果一次性地加载到collections中。
而不是通过cursor一条一条地处理。
可以在select into,fetch into,returning into语句使用bulk collect。
注意在使用bulk collect时,所有的into变量都必须是collections.



原创粉丝点击