我在一个过程中定义了一个游标
n      int;
v_id   varchar2(20);
cursor cur_aaa is select id  from t_tb; 
--在用这个游标的时候我想要在打开游标时候得到这个游标中的记录数;
begin
.......
open cur_aaa;
loop;
n := cur_aaa%rowcount;    --在这里为什么得不到记录个数?
fetch cur_aaa into v_id;
n := cur_aaa%rowcount;    --若打开成功,在这里为什么得到的总是'1'?而不是所有的记录条数
                          --记录数据条数应该很多的,   可是总是得到'1'
                          --%rowcount属性得到的应该是游标中的所有的记录条数
                          --难道%rowcount属性得到是当前fetch到的记录条数
exit when cur_aaa %notfount;
.......
end loop;
close cur_aaa;
end.是否是要用别的什么方法来得到游标中的记录数?
请指点一二,谢谢

解决方案 »

  1.   

    还是先写个count的游标取出总数吧
      

  2.   

    还有两种方法实现
    1.在游标中加select count(*) from tab 语句;
    2.在loop中加i:=i+1;语句来实现;
      

  3.   

    在游标打开,但是没有fecth时,%rowcount 为0,这以后,%rowcount就是从结果集里提取出来的记录数,fetch每成功一次,%rowcount加1,你整理下你的程序(主要是对N的赋值),测试下看看
      

  4.   

    随便帖一个!set serveroutput on declare type  type_tab  is table of aa%rowtype index by binary_integer;v_tab type_tab;begin 
      
      execute immediate 'select * from aa ' bulk collect into v_tab;
      
      dbms_output.put_line(v_tab.count);end;
      

  5.   

    你想用rowcount的话,就必须fetch到底。才可以。
      

  6.   

    上面说的很对,你应该多看看oracle 的plsql
      

  7.   

    %rowcount反回的是当前执行的语句所影响的行数...