2013-12-14 41 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