2013-12-14 80 views
2

爲什麼會重複記錄?請糾正我。感謝提前。重複最終記錄的Oracle光標

declare 
    clazzes_rec clazzes%rowtype; 
    cursor clazzes_cur is select * from clazzes; 
begin 
    if clazzes_cur%isopen then 
    dbms_output.put_line('Cursor is not open,trying to Open.... ... .. .'); 
    end if; 

    open clazzes_cur; 

    dbms_output.put_line('Cursor opened :'); 

    loop 
    fetch clazzes_cur into clazzes_rec; 
     dbms_output.put_line('id:'||clazzes_rec.id||':name:'||clazzes_rec.name); 
    exit when clazzes_cur%notfound; 
    end loop; 

    close clazzes_cur; 

end; 

輸出繼電器:

Cursor opened : 
id:1:name:leo1 
id:2:name:leo2 
id:3:name:leo3 
id:4:name:leo4 
id:4:name:leo4 

PL/SQL procedure successfully completed 

回答

5

只是交換線路:

loop 
fetch clazzes_cur into clazzes_rec; 
exit when clazzes_cur%notfound; 
    dbms_output.put_line('id:'||clazzes_rec.id||':name:'||clazzes_rec.name); 
end loop; 

當你已經獲取的最後一條記錄,並試圖獲取下一個clazzes_cur%notfound變成真實的,但之前它有機會退出循環,您將再次輸出最後一條記錄。

+0

謝謝你的作品。 – sunleo