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

存储过程如下求告诉错误!!createorreplaceprocedure全班排名(classinchar(8))asbeginselectb.学号,a.姓名,avg(a... 存储过程 如下 求 告诉错误 !!
create or replace procedure 全班排名(
class in char(8)
)
as
begin
select b.学号,a.姓名, avg(a.成绩) 平均分,sum(a.成绩) 总分
from 成绩信息表 a
join 学籍信息表 b on (a.学号=b.学号);
join 班级信息表 c on (c.班级号=b.班级号);
where c.班级名称=class;
group by b.学号;
order by avg(成绩) ,b.学号 desc;end;
展开
 我来答
BuddhaQQ
推荐于2017-12-16 · TA获得超过1762个赞
知道小有建树答主
回答量:860
采纳率:100%
帮助的人:971万
展开全部
1. 创建完存储过程(在命令行),可以用showerr看具体错误
2. 可以在PLSQL中,输入"全班排名", 然后俺右键->编辑,看到具体错误
3. 你的sql从from后一直到group by的分号;是多余的,即便单独在SQL窗口也会报错
SQL应该改成
select b.学号,a.姓名, avg(a.成绩) 平均分,sum(a.成绩) 总分

from 成绩信息表 a
join 学籍信息表 b on (a.学号=b.学号)
join 班级信息表 c on (c.班级号=b.班级号)
where c.班级名称=class
group by b.学号
order by avg(成绩) ,b.学号 desc;
4. 存储过程不能直接用SQL,要用游标或select……into方式
比如:
create or replace procedure 全班排名(
class in char(8)
)
as
cursor cur(p_class char(8)) is
select b.学号,a.姓名, avg(a.成绩) 平均分,sum(a.成绩) 总分

from 成绩信息表 a
join 学籍信息表 b on (a.学号=b.学号)
join 班级信息表 c on (c.班级号=b.班级号)
where c.班级名称=class
group by b.学号
order by avg(成绩) ,b.学号 desc;
rs cur%rowtype;
begin
for rs in cur(class) loop
dbms_output.put_line(rs.学号||','||rs.姓名||','||rs.平均分||','||rs.总分);
end loop;
end;
micro0369
2012-12-30 · TA获得超过1.2万个赞
知道大有可为答主
回答量:9250
采纳率:85%
帮助的人:3956万
展开全部
1. 不要每行都有分号,一个sql语句完了才能加分号
2. 要用select ... into ... ,不能直接select 。。. feom,或者用游标
3. 参数只要数据类型,不用指定长度。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式