Oracle Bulk Collect问题

时间:2010-10-05 15:40:43

标签: sql oracle plsql

我在使用一块批量收集sql时遇到了一些问题,我希望你可以帮忙解决这个问题。

使用以下代码:

declare
    cursor c1
    is
    select customer,product
    from products;

    type type_cust is table of products.customer%type;
    type type_prod is table of products.product%type;

    v_array_cust    type_cust;
    v_array_prod    type_prod;
begin
    open c1;
    loop
        fetch c1 
        into v_array_cust, v_array_prod
        limit 1000;

        exit when c1%notfound;

        for i in 1..v_array_cust.count
        loop
            --Do some processing here.
        end loop;
    end loop;
end;
/

光标c1返回53166行。

然而,代码处理53000行然后结束。似乎在去检索最后166条记录时会出现某种失败。

如果找到的记录少于1000条记录,那么fetch会返回%notfound吗?我应该将出口移动到循环的末尾吗? (我将尝试这个,但它深入一段代码需要3个小时才能达到失败点。)

提前致谢。

3 个答案:

答案 0 :(得分:9)

好吧,比我已经做过的更好的谷歌搜索给了我答案,你不应该使用%notfound with limit。

检查here以获取解释。

答案 1 :(得分:4)

仅供参考,这是一个简单的更改,使代码正确运行:

open c1;
loop
    fetch c1 
    into v_array_cust, v_array_prod
    limit 1000;

    -- the count will be 0 if no rows were found, so this loop will do nothing.
    for i in 1..v_array_cust.count
    loop
        --Do some processing here.
    end loop;

    -- exit now if the last fetch got the last set of rows
    exit when c1%notfound;
end loop;
close c1;

答案 2 :(得分:1)

很抱歉成为那个说出来的人,但是确定!游标!...你写这个的方式看起来你来自线性编程背景。您是否考虑过基于集合的解决方案?