声明游标位置错了,应该在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;
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;
zbhm varchar2;
yjyjjm varchar2;varchar变量声明应该说明长度
yjhm varchar2(10);
zbhm varchar2(10);
yjyjjm varchar2(10);
或用for循环
如
for v_rec in cursor_name loop
....
end loop;
如下:
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;