CREATE TABLE Rank( 
division CHAR(20), 
number INT); CREATE PROC statistic_(name CHAR(20)) 
AS 
DECLARE 
less60 int := 0; //分为五个分数段,并置初始值为0 
b60a70 int := 0; 
b70a80 int := 0; 
b80a90 int := 0; 
more90 int := 0; 
curcno CHAR(4); --设字符型变量curcno 存放输入的课程名称参数 
BEGIN 
SELECT 课程号 INTO curcno --根据课程名称在Course 表中查询查询该课程号 
FROM 课程表 
WHERE 课程名 = name; 
IF NOT FOUND THEN --如果不存在用户输入的课程名称,返回错误信息 
RAISE EXCEPTION '输入错误,没有该课程'; 
END IF; 
SELECT count(*) INTO less60 --查询分数低于60 分的学生人数 
FROM 成绩表 
WHERE 课程号 = curcno AND 成绩 < 60; 
SELECT count(*) INTO b60a70 --查询分数在60 到70 之间的学生人数 
FROM 成绩表 
WHERE 课程号 = curcno AND 成绩 >= 60 AND 成绩 < 70; 
SELECT count(*) INTO b70a80 --查询分数在70 到80 之间的学生人数 
FROM 成绩表 
WHERE 课程号 = curcno AND 成绩 >= 70 AND 成绩 < 80; 
SELECT count(*) INTO b80a90 --查询分数在80 到90 之间的学生人数 
FROM 成绩表 
WHERE 课程号 = curcno AND 成绩 >= 80 AND 成绩 < 90; 
SELECT count(*) INTO more90 --查询分数高于90 的学生人数 
FROM 成绩表 
WHERE 课程号 = curcno AND 成绩 >= 90; 
--向表Rank 中插入五条记录,显示成绩分布情况 
INSERT INTO Rank VALUES('[0,60)',less60); 
INSERT INTO Rank VALUES('[60,70)',b60a70); 
INSERT INTO Rank VALUES('[70,80)',b70a80); 
INSERT INTO Rank VALUES('[80,90)',b80a90); 
INSERT INTO Rank VALUES('[90,100]',more90); 
END 消息 102,级别 15,状态 1,过程 statistic_,第 1 行 
'name' 附近有语法错误。 
消息 155,级别 15,状态 2,过程 statistic_,第 4 行 
'int' 不是可以识别的 CURSOR 选项。 
消息 4145,级别 15,状态 1,过程 statistic_,第 14 行 
在应使用条件的上下文(在 'THEN' 附近)中指定了非布尔类型的表达式。 
消息 128,级别 15,状态 1,过程 statistic_,第 33 行 
在此上下文中不允许使用名称 "less60"。有效表达式包括常量、常量表达式和变量(在某些上下文中)。不允许使用列名。 
消息 128,级别 15,状态 1,过程 statistic_,第 34 行 
在此上下文中不允许使用名称 "b60a70"。有效表达式包括常量、常量表达式和变量(在某些上下文中)。不允许使用列名。 
消息 128,级别 15,状态 1,过程 statistic_,第 35 行 
在此上下文中不允许使用名称 "b70a80"。有效表达式包括常量、常量表达式和变量(在某些上下文中)。不允许使用列名。 
消息 128,级别 15,状态 1,过程 statistic_,第 36 行 
在此上下文中不允许使用名称 "b80a90"。有效表达式包括常量、常量表达式和变量(在某些上下文中)。不允许使用列名。 
消息 128,级别 15,状态 1,过程 statistic_,第 37 行 
在此上下文中不允许使用名称 "more90"。有效表达式包括常量、常量表达式和变量(在某些上下文中)。不允许使用列名。 出现上面的错误,怎么解决啊 
 
 

解决方案 »

  1.   

    name -----> @name其它类同
      

  2.   

    DECLARE 
    @less60 int ,-- //分为五个分数段,并置初始值为0 
    @b60a70 int,
    @b70a80 int ,
    @b80a90 int ,
    @more90 int ---用变量的地方加@
      

  3.   

    都改啦不过还是错啊
    CREATE PROC statistic_
    @name CHAR(20)
    AS
    DECLARE
    @less60 int, 
    @b60a70 int,
    @b70a80 int,
    @b80a90 int,
    @more90 int,
    @curcno CHAR(4) --设字符型变量curcno 存放输入的课程名称参数
    BEGIN
    SELECT 课程号 INTO @curcno 
    FROM 课程表
    WHERE 课程名 = @name
    --IF NOT FOUND THEN --如果不存在用户输入的课程名称,返回错误信息
    --RAISE EXCEPTION '输入错误,没有该课程';
    --END IF;
    SELECT count(*) INTO @less60 --查询分数低于60 分的学生人数
    FROM 成绩表
    WHERE 课程号 = @curcno AND 成绩< 60
    SELECT count(*) INTO @b60a70 --查询分数在60 到70 之间的学生人数
    FROM 成绩表
    WHERE 课程号 = @curcno AND 成绩 >= 60 AND 成绩< 70
    SELECT count(*) INTO @b70a80 --查询分数在70 到80 之间的学生人数
    FROM 成绩表
    WHERE 课程号 = @curcno AND 成绩 >= 70 AND 成绩 < 80
    SELECT count(*) INTO @b80a90 --查询分数在80 到90 之间的学生人数
    FROM 成绩表
    WHERE 课程号 = @curcno AND 成绩 >= 80 AND 成绩 < 90
    SELECT count(*) INTO @more90 --查询分数高于90 的学生人数
    FROM 成绩表
    WHERE 课程号 = @curcno AND 成绩 >= 90
    --向表Rank 中插入五条记录,显示成绩分布情况
    INSERT INTO Rank VALUES('[0,60)',@less60);
    INSERT INTO Rank VALUES('[60,70)',@b60a70);
    INSERT INTO Rank VALUES('[70,80)',@b70a80);
    INSERT INTO Rank VALUES('[80,90)',@b80a90);
    INSERT INTO Rank VALUES('[90,100]',@more90);
    END
      

  4.   

    SELECT count(*) INTO @less60 --查询分数低于60 分的学生人数 
    FROM 成绩表 
    WHERE 课程号 = @curcno AND 成绩 < 60 
    --->
    SELECT @less60=count(*)  --查询分数低于60 分的学生人数 
    FROM 成绩表 
    WHERE 课程号 = @curcno AND 成绩 < 60 下同
      

  5.   

    http://topic.csdn.net/u/20081116/20/af262f15-574b-4136-a592-ea93a104db10.html在你的另一个帖子,我给你的那个不好使吗?