我的一个存储过程可以返回游标(经过测试会返回结果的),我现在想通过一个下面的方式显示这个游标信息
set serveroutput on
declare
 cursor mycursor is 
     select product_package.get_products_ref_cursor 
     from dual;  ----调用一个包下的函数,该函数返回一个游标
 v_product_id products.product_id%type;
 v_name products.name%type;
 v_price products.price%type;
 begin   open mycursor;
   loop
    fetch mycursor into v_product_id,v_name,v_price;
    dbms_output.put_line('产品ID:'||v_product_id||'产品名称:'||v_name||'产品价格:'||v_price);
    exit when mycursor%notfound;
   end loop; 
 end;结果这个运行后只是返回一些数值,没有显示我要求的内容,请高人指点谢谢

解决方案 »

  1.   

    没看出来为什么显示数值,但是看出两处问题
    1.mycursor没关闭;
    2.一下两行颠倒了
        dbms_output.put_line('产品ID:'||v_product_id||'产品名称:'||v_name||'产品价格:'||v_price); 
        exit when mycursor%notfound; 
      

  2.   

    没看出来为什么显示数值,但是看出两处问题 
    1.mycursor没关闭; --不关闭也没有关系的2.一下两行颠倒了 
        dbms_output.put_line('产品ID:'||v_product_id||'产品名称:'||v_name||'产品价格:'||v_price); 
        exit when mycursor%notfound; --这两行如果颠覆,游标的最后一行没有被显示出来
      

  3.   

    楼主检查下   select product_package.get_products_ref_cursor 
        from dual;  返回什么值?
      

  4.   

    就是说每次执行上面的SQL,只能显示如下的值,每执行一次显示的值就比上面的值增加18
    SQL> 
     18  
     36  
     54  
     72  
     90
    而select product_package.get_products_ref_cursor from dual返回的是一个游标
      

  5.   

    调试这个包有结果输出?product_package.get_products_ref_cursor 
    输出的是什么
      

  6.   

    declare
    --定义游标
    cursor c1(v_no number default 0) is--默认值为0
    select * from labor.xland where state > v_no;
    --定义变量为游标的行类型
    v_record c1%rowtype;
    begin 
    for v_record in c1() loop
      dbms_output.put_line(v_record.title||'  '||to_char(v_record.state));
    end loop;
    end;
    测试下内容