2009-06-09 5 views
5

Ich könnte etwas wegen Termin Stress übersehen. Aber dieses Verhalten erstaunt mich. Es sieht so aus, als ob der Cursor 100 Zeilen zwischenspeichert und die continue-Anweisung den Cache löscht und mit dem ersten Datensatz eines neuen Cache-Abrufs beginnt.Cursor Schleife und Continue-Anweisung: unerwartetes Verhalten

ich es verengt auf das folgende Skript nach unten:

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 

Antwort

Verwandte Themen