对300万一张表数据,用游标进行循环,不同写法的效率比较

1、显示游标

declare
    cursor cur_2 is select a.cust_name from ea_cust.cust_info a;
    cust_id varchar2(100);
    
begin
    open cur_2;
    loop
        fetch cur_2 into cust_id;
        exit when cur_2%notfound;
        NULL;
    end loop;
    close cur_2;
end;

--耗时48秒

 

2、隐式游标

declare
    
begin
    for cur_ in (select c.cust_name from ea_cust.cust_info c) loop
    
       NULL;
    
    end loop;

end;

--耗时16秒

 

3、bulk collect into + cursor

declare
    cursor cur_3 is select a.cust_name from ea_cust.cust_info a;
    type t_table is table of varchar2(100);
    c_table t_table;
    to_cust_id varchar2(100); 
begin
    open cur_3;
    loop
         fetch cur_3 bulk collect into c_table limit 100;
         exit when c_table.count = 0;
         for i in c_table.first..c_table.last loop
             null;
             
         end loop;         
    end loop;
    commit;
end;

--耗时13秒,看样子这种最快
 

你可能感兴趣的:(sql,sql)