如何判断游标中有没有记录!
我的函数中用一个引用游标,数据量非常大,我想判断游标中没有数据
------最佳解决方案--------------------
一般都是先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是不会知道到底有多少数据的。
------其他解决方案--------------------对,楼上说的有隐身游标的判断方法。
%FOUND 只有在DML语句影响一行或多行时%FOUND属性才返回true,当返回为NULL值时,则为false.
%NOTFOUND与%FOUND相反,当没有影响到一行时%NOTFOUND属性返回false,当DML语句影响一行或多行时,则返回false.
%ROWCOUNT返回DML语句影响的行数.如果DML语句没有影响任何行,则返回0.
%ISOPEN %ISOPEN返回游标是否已打开的值,在执行SQL语句之后,Oracle自动关闭游标,所以隐式游标的%ISOPEN属性始终为false.
隐式游标属性的使用:
SQL%隐式游标的属性
------其他解决方案--------------------游标有一个属性 %FOUND 和 %NOTFOUND 判断是否找得到数据
------其他解决方案----------------------cursor cur
if cur%rowcount = 0 then
--记录为0
else
--有记录
end if;
------其他解决方案--------------------
当游标不 fetch,%ROWCOUNT 属性就一直是 0,所以根据这个判断是没有用的
------其他解决方案--------------------那你fetch一下,判断有没数据不就知道你想要结果了
------其他解决方案--------------------楼上正解,要先fetch,再用游标的%found来判断是否为空
------其他解决方案--------------------我这边有个奇怪的问题,定义游标Fetch都没报错,但就是没数据,可数据库明明有数据啊(按定义游标一样的条件查的),这是为啥?楼主这个我正想试试!
------其他解决方案--------------------thank you 。谢谢大家的解答