声明游标位置错了,应该在is之后:
CREATE  or replace procedure rrcursor
(v_pc   in varchar2,
 v_date in date,
 v_dateq in date,
 v_jdjm in varchar2)is
cursor getyj is
 select jz_yjhm,jz_zbhm,jz_yjyjjm from jz_ffyjkbak  
     where (jz_date = v_date or (jz_date = v_dateq and jz_time like '2%')) and (pc_hao='1')
     and (jz_jdjm=(select name_c from jz_jzjm where  name_e = v_jdjm)); 
cursor getyj1 is
  select jz_yjhm,jz_zbhm,jz_yjyjjm from jz_ffyjkbak 
   where (jz_date = v_date)  and (pc_hao = v_pc and jz_jdjm=(select name_c   from    jz_jzjm where  name_e = v_jdjm));               
yjhm varchar2;
zbhm varchar2;
yjyjjm varchar2;
begin
 if v_pc='1' then
 open getyj; 
 loop
 fetch getyj into yjhm,zbhm,yjyjjm;
 dbms_output.put_line(yjhm,zbhm,yjyjjm);
 end loop;
 close geryj;
 end if;
 if v_pc<>'1' then
 open getyj1; 
 loop
 fetch getyj into yjhm,zbhm,yjyjjm;
 dbms_output.put_line(yjhm,zbhm,yjyjjm);
 end loop;
 close getyj1;
 end if;

解决方案 »

  1.   

    sorry!是我的笔误!我的游标声明是正确的!
      

  2.   

    yjhm varchar2;
    zbhm varchar2;
    yjyjjm varchar2;varchar变量声明应该说明长度
    yjhm varchar2(10);
    zbhm varchar2(10);
    yjyjjm varchar2(10);
      

  3.   

    在游标loop中应增加退出条件!exit when cursor_name%NOTFOUND
    或用for循环

    for v_rec in cursor_name loop
    ....
    end loop;
      

  4.   

    对,多加exit when cursor_name%NOTFOUND
    如下:
    if v_pc='1' then
     open getyj; 
     loop
     fetch getyj into yjhm,zbhm,yjyjjm;
     exit when getyj%NOTFOUND;
     dbms_output.put_line(yjhm,zbhm,yjyjjm);
     end loop;
     close geryj;
     end if;