先看以代码把  open ro3(v_kssj,v_jssj); fetch ro3 into v_temp;
     exit when ro3%notfound;
     loop
        v_pzbh:=v_pzbh||','||v_temp;
     end loop;
 close ro3;这样就会报错 如过把游标去掉 直接就不会报错
我不知道这是为什么?求高手赐教!

解决方案 »

  1.   

    v_pzbh:=v_pzbh||','||v_temp;改成 
    select v_pzbh||','||v_temp into  v_pzbh from dual;
      

  2.   

    具体报什么错误?ro3查询出来的结果是什么类型的 v_temp定义的又是什么类型的?
      

  3.   


    --循环错了
    open ro3(v_kssj,v_jssj); 
    loop  --loop要在这里
        fetch ro3 into v_temp;
        exit when ro3%notfound;
        v_pzbh:=v_pzbh||','||v_temp;
    end loop;
    close ro3;
      

  4.   

    带参数的游标还没用过,不过我想问一下
    fetch 的时候用加参数吗?
    如fetch fo3(v_kssj, v_jssj) into v_temp;
      

  5.   

    open ro3(v_kssj,v_jssj); 
     loop
       fetch ro3 into v_temp;
         exit when ro3%notfound;        
         v_pzbh:=v_pzbh||','||v_temp;
     end loop;
     close ro3;
    你那样子。。语法错误,loop退不出来
      

  6.   


    SQL> set serveroutput on;
    SQL> 
    SQL> declare
      2    v_empno number;
      3    v_temp  emp%rowtype;
      4    cursor ro3(eno varchar2) is
      5      select * from emp where empno = eno;
      6    v_pzbh varchar2(200);
      7  begin
      8    v_empno := 7369;
      9    open ro3(v_empno);
     10    loop
     11      fetch ro3
     12        into v_temp;
     13      exit when ro3%notfound;
     14      v_pzbh := v_temp.empno || ',' || v_temp.ename;
     15      dbms_output.put_line(v_pzbh);
     16    end loop;
     17    close ro3;
     18  end;
     19  /7369,SMITHPL/SQL procedure successfully completedSQL> 
      

  7.   


    open ro3(v_kssj,v_jssj);      loop
         fetch ro3 into v_temp;
         exit when ro3%notfound;
         v_pzbh:=v_pzbh||','||v_temp;
         end loop;
     close ro3;
      

  8.   

    1、每循环一次,都要fetch一次。
    2、ro3是如何声明的,除非只取了一个字段(你只给了一个接收变量v_temp),否则会出错的。
    3、如果不是动态游标的话,还是使用for游循环吧,简洁,简单,不易出错。
    for c in ro3(v_kssj,v_jssj) loop
          v_pzbh:=v_pzbh||','||c.pzbh;
    end loop;
      

  9.   

    最好还是使用for循环,简洁明了
      

  10.   


    这样的,你的 exit when 写错地方了,要放在 loop 里面,再试试了
      

  11.   

    是loop放错了位置,他这样是死循环了吧,loop放在fetch前面
      

  12.   

    是loop放错了位置,他这样是死循环了吧,loop放在fetch前面
      

  13.   

    学习了, 再问一下,
    "如果不是动态游标的话,还是使用for游循环吧, "
    为什么动态游标不建议使用for?