题目:统计离散数学的成绩分布情况,即按照各分数段统计人数;(希望各位大神帮帮忙啊,急!我用的是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

解决方案 »

  1.   

    create or replace Procedure Pro1(inCname char(40))
    AS   -- 省去   Declare
    A60 int :=0;
     
      

  2.   

    inCname char(40)
    形参变只能指定类型,不能指定精度。
    所以需要去掉(40)
      

  3.   

    if 语句也有问题啊楼主先去看一下oracle储存过程的基本语法再写吧
      

  4.   

    create or replace Procedure Pro1(inCname char)
    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没有使用,定义干嘛的