我的函数中用一个引用游标,数据量非常大,我想判断游标中没有数据

解决方案 »

  1.   

    游标有一个属性 %FOUND 和 %NOTFOUND 判断是否找得到数据
      

  2.   

    --cursor cur
    if cur%rowcount = 0 then
      --记录为0
    else
      --有记录
    end if;
      

  3.   


    当游标不 fetch,%ROWCOUNT 属性就一直是 0,所以根据这个判断是没有用的
      

  4.   

    那你fetch一下,判断有没数据不就知道你想要结果了
      

  5.   


    一般都是先Fetch一下,执行完Fetch的操作后,再利用%NOTFOUND 判断是否有数据:
    IF cur_a%NOTFOUND THEN --表示Cursor中没有数据;如果楼主想不执行Fetch就判断Cursor是否有数据的话,只能先select count(*) into vn_cnt where (把Cursor的所有条件都加上),判断vn_cnt是否=0喽。因为对于Cursor来说,只Open,不Fetch的时候,Cursor是不会知道到底有多少数据的。
      

  6.   

    楼上正解,要先fetch,再用游标的%found来判断是否为空
      

  7.   

    对,楼上说的有隐身游标的判断方法。
      %FOUND        只有在DML语句影响一行或多行时%FOUND属性才返回true,当返回为NULL值时,则为false.
            %NOTFOUND与%FOUND相反,当没有影响到一行时%NOTFOUND属性返回false,当DML语句影响一行或多行时,则返回false.
            %ROWCOUNT返回DML语句影响的行数.如果DML语句没有影响任何行,则返回0.
            %ISOPEN        %ISOPEN返回游标是否已打开的值,在执行SQL语句之后,Oracle自动关闭游标,所以隐式游标的%ISOPEN属性始终为false.
            隐式游标属性的使用:
            SQL%隐式游标的属性
      

  8.   

    我这边有个奇怪的问题,定义游标Fetch都没报错,但就是没数据,可数据库明明有数据啊(按定义游标一样的条件查的),这是为啥?楼主这个我正想试试!
      

  9.   

    thank you 。谢谢大家的解答