mysql存储过程请教?

类似于游标嵌套

想写如下存储过程,但有些问题不能解决?
是关于教学问卷调查数据的统计的,每个班级每个学科有三个选项(A、B、C),统计每个班级每个学科中A、B、C各自所占的比例

BEGIN
declare className varchar(8); declare ifExistClass varchar(8); declare selectA int(3); declare selectB int(3); declare selectC int(3); declare total int(3);
declare stop int default 0;

--从问卷调查表中统计所有班级的一个学科的A、B、C数量
declare CUR_subject CURSOR FOR select QUESTION_RESULT_DETAILS_CLASS,sum(case when YUWEN= 'A' then 1 else 0 end)YUWENA,sum(case when YUWEN = 'B' then 1 else 0 end)YUWENB,sum(case when YUWEN='C' then 1 else 0 end)YUWENC from question_result_details where QUESTION_CONTENT_ID ='15' group by QUESTION_RESULT_DETAILS_CLASS;

--这句是参考网上,用于循环结束的,但暂时没有使用
declare CONTINUE HANDLER FOR SQLSTATE '02000' SET stop=1;
OPEN CUR_subject;
   
    --循环读取,先取出一个班级一个学科的A、B、C数量   
     fetch CUR_subject into className, selectA, selectB, selectC ;

     ??这时需要用这个班级名去读取另外一个表(统计结果表),看是否存在该班级的统计信息,如果存在则更新,如果不存在则插入。

   ??这里有问题,但不知这里怎么来处理。想另外用一个游标,但提示不能这样。

     declare CUR_class CURSOR FOR select CLASSNAME from QUESTION_RESULT_STAT where CLASSNAME = className;
     fetch CUR_class into ifExistClass;
     if ifExistClass NOT NULL then
             update QUESTION_RESULT_STAT set YUWENA=selectA,  YUWENB=selectB,  YUWENC=selectC where CLASSNAME = className;
     else
             insert into QUESTION_RESULT_STAT values(className,selectA,selectB,selectC);
     end if;
CLOSE CUR_subject;
END


不知这样描述清楚了不,还望指教!

[ 本帖最后由 yqlyd 于 2011-5-11 17:16 编辑 ]

作者: yqlyd   发布时间: 2011-05-11

declare CUR_class CURSOR FOR select CLASSNAME from QUESTION_RESULT_STAT where CLASSNAME = className;
     fetch CUR_class into ifExistClass;


这个地方就没必要使用游标了....
DECLARE  ifExistClass TINYINT DEFAULT 0;

SELECT
          CASE WHEN CLASSNAME IS NULL THEN 0
          ELSE 1 END AS class_flag from QUESTION_RESULT_STAT where CLASSNAME = className  INTO ifExistClass;

作者: jinguanding   发布时间: 2011-05-11