我也想知道这个,现在我都是在这之前,先用游标的条件,select count(*) into rowCnt from ..where....
不知道哪位有好点的方法没?:)

解决方案 »

  1.   

    好像9I版本有CUR%ROWCOUNT属性,在8I好像没有
      

  2.   

    回复人: HorizonXR(地平线) ( ) 信誉:100  2004-11-30 10:47:00  得分: 0  
     
     
       我也想知道这个,现在我都是在这之前,先用游标的条件,select count(*) into rowCnt from ..where....
    不知道哪位有好点的方法没?:)
      
    -----------------------------------------------------------------------------------------
    你的这条语句好像并没有从Cursor中取什么东西啊 
      

  3.   

    回复人: chao778899(220330) ( ) 信誉:98  2004-11-30 11:38:00  得分: 0  
     
     
       好像9I版本有CUR%ROWCOUNT属性,在8I好像没有
      
     
    %ROWCOUNT,是在FETCH之后才会有的
      

  4.   

    不过%ROWCOUNT还是在FTECH之前才会值的!
    没办法了么?
      

  5.   

    只有在FETCH后才可以用ROWCOUNT判断取出的行数的。要想先知道总数只能先用select count(*) 了
      

  6.   

    只能用select count(*) 了么?
      

  7.   

    SQL> select * from bao_temp
      2  /COL1             COL2        SEQ
    ---------- ---------- ----------
    A                  31          1
    A                  11          3
    A                  21          2
    B                  11          4
    B                  21          3
    B                  31          2
    C                  31          2
    C                  11          4
    C                  21          3
    B                  45          1
    C                  78          1選取了 11 列目前歷時: 00:00:00.25
    ----------------------------------------------------
    SQL> declare
      2    cursor cur_col1 is 
      3    select distinct col1
      4    from   bao_temp;
      5    is_col1 varchar2(10);
      6    is_count number(10);
      7  begin
      8    select count(*) into is_count
      9    from  (select distinct col1
     10           from   bao_temp);
     11    dbms_output.put_line('cursor data record number is : '||to_char(is_count)) ;
     12    open cur_col1;
     13    loop
     14         fetch cur_col1 into is_col1;
     15         exit when cur_col1%notfound;
     16  
     17         dbms_output.put_line('bao_temp col1 is : '||is_col1);
     18  
     19    end loop;
     20    close cur_col1;
     21  end;
     22  /
    cursor data record number is : 3
    bao_temp col1 is : A
    bao_temp col1 is : B
    bao_temp col1 is : CPL/SQL 程序順利完成目前歷時: 00:00:00.81
      

  8.   

    snowy_howe(天下有雪) ( ) 信誉:100  2005-01-17 10:31:00  得分: 0  
     
     
       我觉得是这样,你为什么要在取游标之前就想知道总数,可否把想法说出来
    探讨一下?
      
     
    我是想在得到这个记录集后就直接拿总行数来做返回参数了,而不用再select count一次了
    --------------------------------------------------------------------------
    baojianjun(包子) ( ) 信誉:112 包子的意思是想说Select Count一次并不耗费多少时间?
      

  9.   

    既然是在取得记录集之后返回总数,那为什么必须在FETCH之前呢?
    FETCH之后不是可以通过%ROWCOUNT来解决了吗?
      

  10.   

    比如说我是想从总记录集中取出一个页数的记录实现分页,我会只FETCH要返回的指定页的记录集,而不会FETCH所有的记录集,这时的%ROWCOUNT就不是总行数了
      

  11.   

    那就只是 Select Count(*)啦,明天结贴吧
      

  12.   

    出此想法的目的是因为SQL Server里可以在打开游标之后直接取出总行数:)
      

  13.   

    这是oracle为了提高效率而设的吧,如果要先得到总行数,那么肯定需要oracle内部先检索符合条件的记录,这样程序首行的返回就会慢很多的。