FORALL中的values of和indices of的区别


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

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


--indices of
DECLARE
TYPE ID_TABLE_TYPE IS TABLE OF NUMBER(6);--嵌套表
ID_TABLE ID_TABLE_TYPE;
BEGIN
ID_TABLE:=ID_TABLE_TYPE(1,NULL,3,NULL,5);--构造初始化
FORALL I IN INDICES OF ID_TABLE
DELETE FROM DEMO WHERE ID=ID_TABLE(I);
END;

 --VALUES OF
CREATE TABLE NEW_DEMO AS SELECT * FROM DEMO WHERE 1=0;

DECLARE
TYPE 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;
BEGIN
SELECT * BULK COLLECT INTO ID_TABLE,NAME_TABLE FROM DEMO;
INDEX_POINTER:=INDEX_POINTER_TYPE(6,8,10);
FORALL I IN VALUES OF INDEX_POINTER
INSERT 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.



  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值