Oracle 中使用 fetch bulk collect into 批量效率的读取游标数据
2009-05-12 13:13:51 来源:WEB开发网--声明需要集合类型及变量,参照字段的 type 来声明类型
type contacts_type is table of sr_contacts%rowtype;
v_contacts contacts_type;
cursor all_contacts_cur is --用 rownum 来限定取出的记录数来测试
select * from sr_contacts where rownum <= 10000;
begin
open all_contacts_cur;
loop
fetch all_contacts_cur bulk collect into v_contacts limit 256;
for i in v_contacts.first .. v_contacts.last loop --遍历集合
--用 v_contacts(i).sr_contact_id/v_contacts(i).contact_phone/v_contacts(i).remark
--的形式来取出各字段值来执行你的业务逻辑
null; --这里只放置一个空操作,只为测试循环取数的效率
end loop;
exit when all_contacts_cur%notfound;
end loop;
close all_contacts_cur;
end;
关于 limit 参数
你可以根据你的实际来调整 limit 参数的大小,来达到你最优的性能。limit 参数会影响到 pga 的使用率。而且也可以在 fetch bulk 中省略 limit 参数,写成
fetch all_contacts_cur bulk collect into v_contacts;
有些资料中是说,如果不写 limit 参数,将会以数据库的 arraysize 参数值作为默认值。在 sqlplus 中用 show arraysize 可以看到该值默认为 15,set arraysize 256 可以更改该值。而实际上我测试不带 limit 参数时,外层循环只执行了一轮,好像不是 limit 15,所以不写 limit 参数时,可以去除外层循环,begin-end 部分可写成:
- ››使用linux中的quota教程
- ››oracle 中 UPDATE nowait 的使用方法
- ››Oracle ORA-12560解决方法
- ››Oracle 10g RAC 常用维护命令
- ››Oracle如何在ASM中定位文件的分布
- ››使用jxl生成带动态折线图的excel
- ››Oracle的DBMS_RANDOM.STRING 的用法
- ››oracle 外部表导入时间日期类型数据,多字段导入
- ››Oracle中查找重复记录
- ››oracle修改用户登录密码
- ››Oracle创建删除用户、角色、表空间、导入导出等命...
- ››Oracle中登陆时报ORA-28000: the account is lock...
更多精彩
赞助商链接