写有游标如下:
set serveroutput on;
declare
message varchar2(1000);
Mess_age varchar2(1000); 
type ref_cursor  is ref cursor;               
User_cursor    ref_cursor;               
Users tu_smsvc_user%rowtype;  
begin
 open User_cursor for select * from tu_smsvc_user where Sex='G' and rownum<=3;      
        loop      
           fetch User_cursor into Users;      
           Mess_age := Mess_age||'ID'||Users.USER_ID||',';  
            dbms_output.put_line(mess_age);  
           exit when User_cursor%notfound;      
        end loop;      
 close User_cursor; 
 Message :=Mess_age;  
end;tu_smsvc_user表中只有一条数据 USER_ID=013000;
但是运行输出的结果为:
 id013000,id013000
记录多输出了一次!
后来在表中多添加了几条数据,但最后一条记录总是会多输出了一次!
还不理解,请高手指点!!!!

解决方案 »

  1.   

    fetch User_cursor into Users;      
    --Mess_age := Mess_age||'ID'||Users.USER_ID||',';  
    --dbms_output.put_line(mess_age);  
    exit when User_cursor%notfound;      
    Mess_age := Mess_age||'ID'||Users.USER_ID||',';  
    dbms_output.put_line(mess_age);  
      

  2.   

    回lianhg(lignhg)
    我的目的是把几条记录连起来保存在一个变量里!现在表里只有一条记录只是一个特殊情况!
    如果把Mess_age := Mess_age||'ID'||Users.USER_ID||','; 写在外面只是保存了最后的一个记录的值。
      

  3.   

    没错的:begin
     open User_cursor for select * from tu_smsvc_user where Sex='G' and rownum<=3;      
            loop      
               fetch User_cursor into Users;      
               --Mess_age := Mess_age||'ID'||Users.USER_ID||',';  
                --dbms_output.put_line(mess_age);  
               exit when User_cursor%notfound;  
               Mess_age := Mess_age||'ID'||Users.USER_ID||',';  
                dbms_output.put_line(mess_age);  
        
            end loop;      
     close User_cursor; 
     Message :=Mess_age;  
    end;
      

  4.   

    好了!
    多谢,是我自己对exit when User_cursor%notfound;这句理解错了!