我定义了一个游标查询学生ID,另一个带参数(学生ID)的游标查询每一个不同学生的评均成绩。
我试着输出了第一个游标返回的学生ID,都显示出来了。
但是运行带参数的游标时,老是取的第一个ID。没有循环
不知是怎么回事。望牛人解答!create or replace procedure AAA
as
--查询学生表的ID
cursor s_sno is select s.sno from student s;
--通过学生ID查询平均成绩
cursor sc_avg(sno varchar2) is select avg(sc.degree) from score sc where sc.sno=sno;
s_sno_j student.sno%type; --变量ID
sc_avg_i score.degree%type; --变量平局成绩
begin
open s_sno;--打开查询ID的游标
loop
fetch s_sno into s_sno_j;
exit when s_sno%notfound;
dbms_output.put_line(s_sno_j);
open sc_avg(s_sno_j); --打开查询平均成绩的游标,参数为学生ID
loop
fetch sc_avg into sc_avg_i;
exit when sc_avg%notfound;
dbms_output.put_line(sc_avg_i);
end loop;
close sc_avg;
end loop;
close s_sno;
end AAA;这是输出结果108
80.3
105
80.3
107
80.3
101
80.3
109
80.3
103
80.3
我试着输出了第一个游标返回的学生ID,都显示出来了。
但是运行带参数的游标时,老是取的第一个ID。没有循环
不知是怎么回事。望牛人解答!create or replace procedure AAA
as
--查询学生表的ID
cursor s_sno is select s.sno from student s;
--通过学生ID查询平均成绩
cursor sc_avg(sno varchar2) is select avg(sc.degree) from score sc where sc.sno=sno;
s_sno_j student.sno%type; --变量ID
sc_avg_i score.degree%type; --变量平局成绩
begin
open s_sno;--打开查询ID的游标
loop
fetch s_sno into s_sno_j;
exit when s_sno%notfound;
dbms_output.put_line(s_sno_j);
open sc_avg(s_sno_j); --打开查询平均成绩的游标,参数为学生ID
loop
fetch sc_avg into sc_avg_i;
exit when sc_avg%notfound;
dbms_output.put_line(sc_avg_i);
end loop;
close sc_avg;
end loop;
close s_sno;
end AAA;这是输出结果108
80.3
105
80.3
107
80.3
101
80.3
109
80.3
103
80.3
这个去出来的应该是一个常量,lz看看是不是全表所有数据的平均值啊,原因同1楼
cursor sc_avg(sno varchar2) is select avg(sc.degree) from score sc where sc.sno=sno;
改成:
cursor sc_avg(v_sno varchar2) is select avg(sc.degree) from score sc where sc.sno=v_sno;
试试
汗~~~ 谢谢大家。