小弟写了个存储过程,跟踪发现cursor不能获得传进来得参数v_outbd_id,
create or replace procedure dll_proc(v_outbd_id in varchar2) as
       cursor cur_test 
       is
         select inq_id,outbd_grpid from outbd_all where outbd_id=v_outbd_id and rownum<10 ;
       v_inq_id varchar(20);
       v_outbd_grpid number(8);
begin
open cur_test;
dbms_output.put_line(cur_test%rowcount);
loop
fetch cur_test into v_inq_id,v_outbd_grpid;
     exit when (cur_test%notfound);
end loop;
close cur_test;    
  commit;
end dll_proc;
很是怪异啊,输出总是为0,如果把where后面得条件删掉就可以了哈,各位帮忙啊!!

解决方案 »

  1.   

    open cur_test(你送入的参数值);
      

  2.   

    看不出什么错误.如果用的ORACLE8I以前的版本,有可能是因为ROWNUM的问题,去掉ROWNUM的条件再试一下.
      

  3.   

    哈哈,看错了, chenbf_sz(大象)说的不错.
      

  4.   

    试一下这样子:
    create or replace procedure dll_proc(v_outbd_id in varchar2) as
      cursor cur_test(p_id) is
        select inq_id,outbd_grpid 
          from outbd_all
         where outbd_id=p_id
           and rownum<10 ;
      v_inq_id varchar(20);
      v_outbd_grpid number(8);
    begin
      open cur_test(v_outbd_id);
      dbms_output.put_line(cur_test%rowcount);
      loop
        fetch cur_test into v_inq_id,v_outbd_grpid;
         exit when (cur_test%notfound);
      end loop;
      close cur_test;      --commit;
    end dll_proc;
      

  5.   

    用楼上这位得动态cursor也不对啊,我用的是8.1.5啊,郁闷,始终输出0,将该sql语句copy出来执行绝对是有数据得。
      

  6.   

    你是不是这行输出总是为0?dbms_output.put_line(cur_test%rowcount);游标数据在FETCH之后,才会给ROWCOUNT赋值
      

  7.   

    我是在程序结束之后才去看rowcount得,而且我单步跟踪看过
    loop
        fetch cur_test into v_inq_id,v_outbd_grpid;
         exit when (cur_test%notfound);
      end loop;
    close cur_test;
    这个根本没循环,而符合条件得记录绝对是有得。    
      

  8.   

    你这样试试:loop
        fetch cur_test into v_inq_id,v_outbd_grpid;
        dbms_output.put_line(cur_test%rowcount);
         exit when (cur_test%notfound);
      end loop;
    close cur_test;