大家好,我在创建一个product_cur_procedure的过程时,过程创建正常,如
..........
........... 
34      end loop;
 35    close cur_category;
 36  end;
 37  /过程已创建。
但在执行时,总显示
SQL> exec product_cur_procedure;
BEGIN product_cur_procedure; END;*
第 1 行出现错误:
ORA-01403: 未找到任何数据
ORA-06512: 在 "SCOTT.PRODUCT_CUR_PROCEDURE", line 16
ORA-06512: 在 line 1这是怎么回事呢?那个line 16 是什么意思呢?

解决方案 »

  1.   

    原因:就是你的游标没有找到数据啊,尽管你认为可以接受,但这对oracle来说是一种异常!
    解决:检查你的游标定义是否正确,或在异常处理部分处理
      

  2.   

    SQL> create procedure product_cur_procedure
       2  as
       3  cur_pro_cate productinfo.category%type;            --存放产品类型编码
       4  cur_cate_name categoryinfo.categoryname%type;      --存放产品类型名称
       5  cur_proinfo productinfo%rowtype;           --存放productinfo行记录
       6
       7  cursor cur_category
       8  is
       9  select category from productinfo group by category;
      10
      11  begin
      12    open cur_category;
      13      loop
      14     fetch cur_category into cur_pro_cate;
      15     exit when cur_category%notfound;
      16     select categoryinfo.categoryname into cur_cate_name
       --16
      17             from categoryinfo
      18             where categoryid=cur_pro_cate;
      19     if sql%found then
      20             dbms_output.put_line('----------------------------------------')
     ;
      21             dbms_output.put_line(cur_cate_name||':');
      22
      23     end if;
      24     for yinshi in
      25             (select * from productinfo where category=cur_pro_cate)
      26
      27             loop
      28               dbms_output.put_line('产品名称'||yinshi.productname||
      29                                     '产品价格'||yinshi.productprice||
      30                                     '产品数量'||yinshi.quantity);
      31
      32             end loop;
      33
      34      end loop;
      35    close cur_category;
      36  end;
      37  /
     
    过程已创建。
    SQL> exec product_cur_procedure;
     BEGIN product_cur_procedure; END;
     
    *
     第 1 行出现错误:
     ORA-01403: 未找到任何数据
     ORA-06512: 在 "SCOTT.PRODUCT_CUR_PROCEDURE", line 16
     ORA-06512: 在 line 1
    是这样的的。
      

  3.   

    需要做异常处理,16-23行改下:     BEGIN
    select categoryinfo.categoryname into cur_cate_name
       from categoryinfo
       where categoryid=cur_pro_cate;
           EXCEPTION
           WHEN NO_DATA_FOUND THEN
           cur_cate_name:='NOT FOUND';
           END;
        dbms_output.put_line('----------------------------------------');
        dbms_output.put_line(cur_cate_name||':');
      

  4.   


    可能是这句导致的
    select categoryinfo.categoryname into cur_cate_name
    from categoryinfo
    where categoryid=cur_pro_cate;