2009-06-09 7 views
5

Je pourrais être négliger quelque chose en raison du stress de l'échéance. Mais ce comportement me stupéfie. Il semble que le curseur met en cache 100 lignes et l'instruction continue vide le cache et commence par le premier enregistrement d'une nouvelle extraction de cache.boucle de curseur et la déclaration continue: comportement inattendu

Je rétréci vers le bas le script suivant:

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 

Répondre

Questions connexes