2009-06-09 13 views
5

締め切りのストレスのために何かを見落としている可能性があります。しかし、この行動は私を驚かせる。 カーソルが100行をキャッシュし、continue文がキャッシュ をフラッシュし、新しいキャッシュ・フェッチの最初のレコードから始まるように見えます。カーソルループとcontinue文:予期しない動作

私は以下のスクリプトにそれを絞り込む:

drop table test1; 

create table test1 (test1_id NUMBER); 

begin 
    for i in 1..300 
    loop 
    insert into test1 values (i); 
    end loop; 
end; 
/

declare 
    cursor c_test1 is 
    select * 
    from test1; 
begin 
    for c in c_test1 
    loop 
    if mod(c.test1_id,10) = 0 
    then 
     dbms_output.put_line(c_test1%ROWCOUNT||' '||c.test1_id||' Continue'); 
     continue; 
    end if; 
    dbms_output.put_line(c_test1%ROWCOUNT||' '||c.test1_id||' Process'); 
    end loop; 
end; 
/

1 1 Process 
2 2 Process 
3 3 Process 
4 4 Process 
5 5 Process 
6 6 Process 
7 7 Process 
8 8 Process 
9 9 Process 
10 10 Continue **Where are tes1_id's 11 to 100?** 
11 101 Process 
12 102 Process 
13 103 Process 
14 104 Process 
15 105 Process 
16 106 Process 
17 107 Process 
18 108 Process 
19 109 Process 
20 110 Continue **Where are tes1_id's 111 to 200?** 
21 201 Process 
22 202 Process 
23 203 Process 
24 204 Process 
25 205 Process 
26 206 Process 
27 207 Process 
28 208 Process 
29 209 Process 
30 210 Continue **Where are tes1_id's 211 to 300?** 


Oracle Database 11g Enterprise Edition Release 11.1.0.7.0 - Production 
PL/SQL Release 11.1.0.7.0 - Production 
redhat release 5 
2 node RAC 

答えて