题目:统计离散数学的成绩分布情况,即按照各分数段统计人数;(希望各位大神帮帮忙啊,急!我用的是Oracle9i的版本)代码:(Course 课程表(cno,cname,cpno),SC 选课表(sno,cno,grade))
create or replace Procedure Pro1(inCname char(40))
AS Declare
A60 int :=0;
A70 int :=0;
A80 int :=0;
A90 int :=0;
A100 int :=0;
SnoLS char(9);
GradeLS smallint;
cursor LS is select sno,grade from SC where Cno=
(select Cno from Course where Cname=inCname);Begin
open LS;
loop
fetch LS into SnoLS,GradeLS;
exit when LS %NOTFOUND;
if (GradeLS<60) then A60:=A60+1; else
if (GradeLS<70) then A70:=A70+1; else
if (GradeLS<80) then A80:=A80+1; else
if (GradeLS<90) then A90:=A90+1; else
A100:=A100+1; end if; end if;end if; end if;
end loop;
close LS;
DBMS_OUTPUT.PUT_LINE('60分以下:'||A60);
DBMS_OUTPUT.PUT_LINE('60--70分:'||A70);
DBMS_OUTPUT.PUT_LINE('70--80分:'||A80);
DBMS_OUTPUT.PUT_LINE('80--90分:'||A90);
DBMS_OUTPUT.PUT_LINE('90-100分:'||A100);
commit;
End;
/报错:警告: 创建的过程带有编译错误。SQL> show error;
PROCEDURE PRO1 出现错误:
LINE/COL ERROR
-------- -----------------------------------------------------------------
1/28 PLS-00103: 出现符号 "("在需要下列之一时:
:= ) , default varying
character large
符号 ":=" 被替换为 "(" 后继续。2/4 PLS-00103: 出现符号 "DECLARE"在需要下列之一时:
begin function package
pragma procedure subtype type use <an identifier>
<a double-quoted delimited-identifier> form current cursor
create or replace Procedure Pro1(inCname char(40))
AS Declare
A60 int :=0;
A70 int :=0;
A80 int :=0;
A90 int :=0;
A100 int :=0;
SnoLS char(9);
GradeLS smallint;
cursor LS is select sno,grade from SC where Cno=
(select Cno from Course where Cname=inCname);Begin
open LS;
loop
fetch LS into SnoLS,GradeLS;
exit when LS %NOTFOUND;
if (GradeLS<60) then A60:=A60+1; else
if (GradeLS<70) then A70:=A70+1; else
if (GradeLS<80) then A80:=A80+1; else
if (GradeLS<90) then A90:=A90+1; else
A100:=A100+1; end if; end if;end if; end if;
end loop;
close LS;
DBMS_OUTPUT.PUT_LINE('60分以下:'||A60);
DBMS_OUTPUT.PUT_LINE('60--70分:'||A70);
DBMS_OUTPUT.PUT_LINE('70--80分:'||A80);
DBMS_OUTPUT.PUT_LINE('80--90分:'||A90);
DBMS_OUTPUT.PUT_LINE('90-100分:'||A100);
commit;
End;
/报错:警告: 创建的过程带有编译错误。SQL> show error;
PROCEDURE PRO1 出现错误:
LINE/COL ERROR
-------- -----------------------------------------------------------------
1/28 PLS-00103: 出现符号 "("在需要下列之一时:
:= ) , default varying
character large
符号 ":=" 被替换为 "(" 后继续。2/4 PLS-00103: 出现符号 "DECLARE"在需要下列之一时:
begin function package
pragma procedure subtype type use <an identifier>
<a double-quoted delimited-identifier> form current cursor
解决方案 »
- dbms_scheduler报错ORA-01438:?求助,求助。。。
- ODBC访问oracle, 自动发送"SELECT ROWID"的问题
- sqlplus中怎样取消当前查询,且不会中断连接?
- 这个视图如何建立?在线等待高手指点!
- oracle存储过程对象保存在什么表中
- 为何数据库老是意外关闭?
- oracle数据库中要是想建立一个存储过程,使其返回一个记录集,应该怎么写啊?into到哪里啊?
- 如何找出重复数据???
- 能否象sql server2000企业管理器那样在画面中加上对所建表字段的注释?
- oracle WIN7下本地的操作系统认证
- 查看Oracle表空间使用率
- 求教各位前辈,两种大型数据库记录的ID设计优劣问题
AS -- 省去 Declare
A60 int :=0;
形参变只能指定类型,不能指定精度。
所以需要去掉(40)
AS
A60 number :=0;
A70 number :=0;
A80 number :=0;
A90 number :=0;
A100 number :=0;
SnoLS char(9);
GradeLS number;
cursor LS is select sno,grade from SC where Cno=
(select Cno from Course where Cname=inCname);Begin
open LS;
loop
fetch LS into SnoLS,GradeLS;
exit when LS %NOTFOUND;
if (GradeLS<60) then A60:=A60+1;
else if (GradeLS<70) then A70:=A70+1;
else if (GradeLS<80) then A80:=A80+1;
else if (GradeLS<90) then A90:=A90+1;
else
A100:=A100+1;
end if;
end loop;
close LS;
DBMS_OUTPUT.PUT_LINE('60分以下:'||A60);
DBMS_OUTPUT.PUT_LINE('60--70分:'||A70);
DBMS_OUTPUT.PUT_LINE('70--80分:'||A80);
DBMS_OUTPUT.PUT_LINE('80--90分:'||A90);
DBMS_OUTPUT.PUT_LINE('90-100分:'||A100);End;
试着改下,另外SnoLS没有使用,定义干嘛的