WEB开发网
开发学院数据库Oracle Oracle 中使用 fetch bulk collect into 批量效率... 阅读

Oracle 中使用 fetch bulk collect into 批量效率的读取游标数据

 2009-05-12 13:13:51 来源:WEB开发网   
核心提示: begin open all_contacts_cur; fetch all_contacts_cur bulk collect into v_contacts; for i in v_contacts.first .. v_contacts.last loop --遍历集合 --

begin 
    open all_contacts_cur;  
    fetch all_contacts_cur bulk collect into v_contacts;  
    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; --这里只放置一个空操作,只为测试循环取数的效率  
        dbms_output.put_line(2000);  
    end loop;  
    close all_contacts_cur;  
end; 
begin
    open all_contacts_cur;
    fetch all_contacts_cur bulk collect into v_contacts;
    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; --这里只放置一个空操作,只为测试循环取数的效率
        dbms_output.put_line(2000);
    end loop;
    close all_contacts_cur;
end;

bulk collect 的其他用法(总是针对集合)

select into 语句中,如:

SELECT sr_contact_id,contact_phone BULK COLLECT INTO v_id,v_phone
     FROM sr_contacts WHERE ROWNUM <= 100;
dbms_output.put_line('Count:'||v_id.count||', First:'||v_id(1)||'|'||v_phone(1));

returning into 语句中,如:

DELETE FROM sr_contacts WHERE sr_contact_id < 30
    RETURNING sr_contact_id, contact_phone BULK COLLECT INTO v_id, v_phone;
dbms_output.put_line('Count:'||v_id.count||', First:'||v_id(1)||'|'||v_phone(1));

forall 的 bulk dml 操作,它大大优于 for 集合后的操作

fetch all_contacts_cur bulk collect into v_contacts;
forall i in 1 .. v_contacts.count
--forall i in v_contacts.first .. v_contacts.last  
--forall i in indices of v_contacts --10g以上,可以是非连续的集合  
insert into sr_contacts(sr_contact_id,contact_phone,remark)
    values(v_contacts(i).sr_contact_id,v_contacts(i).contact_phone,v_contacts(i).remark); 

--或者是单条的 delete/update 操作

上一页  2 3 4 5 6 7 

Tags:Oracle 使用 fetch

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接