帮忙!这个存储过程怎么写?在线等!

JayPan2008 2009-10-27 09:02:05
创建一个带输入参数的存储过程,输入分数参数,执行存储过程得到平均分大于该分 数
的学生统计成绩信息(包括学号,姓名,平均分,课程门数字段)

表结构:
StudName
StudNo
StudSex
CourseID
StudScore

先谢了!
...全文
131 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
lizhenyang 2009-10-27
  • 打赏
  • 举报
回复
个人认为你这个表的结构不太合理。学生和课程是多对多的关系,学生成绩应该从学生表中分离出来,可以通过学生成绩表体现出学生和课程间的关系。存储过程,我不会写:(
学生——学生成绩——学生课程
JayPan2008 2009-10-27
  • 打赏
  • 举报
回复
可以啦 谢谢!
JayPan2008 2009-10-27
  • 打赏
  • 举报
回复
这应该不影响吧 ?
shiyiwan 2009-10-27
  • 打赏
  • 举报
回复
你的表名是什么?
把from后面的t换成你的表名

在编译后执行时打开set serveroutput on
JayPan2008 2009-10-27
  • 打赏
  • 举报
回复
为什么我的还是不行?

1 create or replace procedure pro(v_avg in number)
2 is
3 begin
4 for i in (select studname,studno,avg(studscore) a,count(courseid) b
5 from t group by studname,studno having avg(studscore) > v_avg)
6 loop
7 dbms_output.put_line(i.studname||' : '||i.studno||' : '||i.a||' : '||i.b);
8 end loop;
9* end pro;
SQL> /

警告: 创建的过程带有编译错误。
zcs_1 2009-10-27
  • 打赏
  • 举报
回复
  create or replace procedure pro(v_avg in number)
is
begin
for i in (select studname,studno,avg(studscore) a,count(courseid) b
from t group by studname,studno having avg(studscore) > v_avg) loop
dbms_output.put_line(i.studname||' : '||i.studno||' : '||i.a||' : '||i.b);
end loop;
end pro;
/
shiyiwan 2009-10-27
  • 打赏
  • 举报
回复
create or replace procedure pro(v_avg in number)
is
begin
for i in (select studname,studno,avg(studscore) a,count(courseid) b
from t group by studname,studno having avg(studscore) > v_avg)
loop
dbms_output.put_line(i.studname||' : '||i.studno||' : '||i.a||' : '||i.b);
end loop;
end pro;
JayPan2008 2009-10-27
  • 打赏
  • 举报
回复

1 create or replace procedure pro(v_avg in number)
2 is
3 begin
4 for i in (select studname,studno,avg(studscore) a,count(courseid) b
5 from t group by studname,studno having avg(studscore) > v_avg)
6 dbms_output.put_line(i.studname||' : '||i.studno||' : '||i.a||' : '||i.b);
7* end pro;
8 /

警告: 创建的过程带有编译错误。

出现上面的错误了
shiyiwan 2009-10-27
  • 打赏
  • 举报
回复
指dbms那句的首尾
shiyiwan 2009-10-27
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 binzai325 的回复:]
谢谢 我试下!
[/Quote]

#1首尾加
loop
end loop;

写的太快没测试
小灰狼W 2009-10-27
  • 打赏
  • 举报
回复
create or replace procedure proc(p_score in number)
as
begin
for cur1 in (select * from (select t.*,avg(studscore)over(partition by studno)ag from score t)
where ag>p_score)
loop
dbms_output.put_line(cur1.studname||' '||cur1.studno||' '||cur1.studsex||' '||cur1.courseid||' '||cur1.studscore);
end loop;
end proc;
bw555 2009-10-27
  • 打赏
  • 举报
回复
select studno,studname,avg(studscore),count(courseid)
from tab
group by studno,studname
having avg(studscore)>'参数'
JayPan2008 2009-10-27
  • 打赏
  • 举报
回复
谢谢 我试下!
shiyiwan 2009-10-27
  • 打赏
  • 举报
回复
create or replace procedure pro(v_avg in number)
is
begin
for i in (select studname,studno,avg(studscore) a,count(courseid) b
from t group by studname,studno having avg(studscore) > v_avg)
dbms_output.put_line(i.studname||' : '||i.studno||' : '||i.a||' : '||i.b);
end pro;

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧