我定义了一个游标查询学生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

解决方案 »

  1.   

    cursor sc_avg(sno varchar2) is select avg(sc.degree) from score sc where sc.sno=sno; 改改这里的参数名试试。不用sno了,和字段名一样,不知道是不是这里的问题,
      

  2.   

    cursor sc_avg(sno varchar2) is select avg(sc.degree) from score sc where sc.sno=sno; 
    这个去出来的应该是一个常量,lz看看是不是全表所有数据的平均值啊,原因同1楼
      

  3.   

    看着是没啥问题。
    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; 
    试试
      

  4.   

    靠 问题解决了 还真是第二个游标变量名字的问题 我把sno改成s_no就OK了
    汗~~~ 谢谢大家。
      

  5.   

    sc.sno=sno两边都被认为是表中的列,所以是恒成立的。所以那个sql取出来的是固定值