/*PL/SQL的显示游标示例*/
DECLARE
CURSOR cur_count IS /*声明游标*/
SELECT city_name,count(*) FROM tb_phone_no
GROUP BY city_name
ORDER BY count(*) desc;

cityName VARCHAR(10);
countNum INTEGER;
BEGIN
OPEN cur_count; /*打开游标*/

FETCH cur_count INTO cityName,countNum; /*从游标中检索数据行*/
WHILE cur_count%FOUND LOOP
/*当前面的FETCH语句至少对应于数据库中的一条记录时,%FOUND属性为TRUE*/
DBMS_OUTPUT.PUT_LINE(cityName || ' ' || countNum);
FETCH cur_count INTO cityName,countNum;
END LOOP;

CLOSE cur_count; /*关闭游标*/
END;
/***********************/
显示声明的游标属性游标名%FOUND 当前面的FETCH语句至少对应于数据库中的一条记录时,%FOUND属性为TRUE
游标名%NOTFOUND 当前面的FETCH语句无法对应数据库中的至少一条记录时,%NOTFOUND属性为TRUE
游标名%ISOPEN 在目标游标打开时,%ISOPEN属性为TURE
游标名%ROWCOUNT 从显示声明的游标中获得的记录行数/************************/

解决方案 »

  1.   

    关键是我的判断操作必需是在fetch into前面写的,现在只能用笨方法了,另外写个select count(*)来判断条数
      

  2.   

    “用rowcount的时候初始值总是0”
    这是正常的,应为rowcount是在每次fetch后进行增加的,所以不能用着个进行判断。另外不知道你为什么一定要在fetch前判断,说说你的需求,也许有别的方法可以变通
      

  3.   

    select count(*) from B;
      

  4.   

    CURSOR C1 IS SELECT A from Bbegin 
        select A into temp_a from B;
        
        open c1;
           .....
        ..
    exception 
        when no_data_found then 
            --这里处理没有查询到记录的情况.