创建存储过程do_query,输入指定学号,查看该生的成绩高于85分的科目数,如果超过2科,则输出very good!,并输出该生的成绩单,否则输出come on!。
时间: 2024-05-14 13:19:12 浏览: 109
以下是基于 MySQL 数据库的存储过程实现:
```
DELIMITER $$
CREATE PROCEDURE do_query(IN stu_id INT)
BEGIN
DECLARE sub_count INT;
DECLARE grade FLOAT;
DECLARE sub_name VARCHAR(20);
DECLARE done INT DEFAULT FALSE;
DECLARE cur CURSOR FOR SELECT subject_name, grade FROM scores WHERE student_id = stu_id AND grade > 85;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
SELECT CONCAT('Score report for student ', stu_id, ':') AS report;
OPEN cur;
SET sub_count = 0;
read_loop: LOOP
FETCH cur INTO sub_name, grade;
IF done THEN
LEAVE read_loop;
END IF;
SET sub_count = sub_count + 1;
SELECT CONCAT(' - ', sub_name, ': ', grade) AS report;
END LOOP;
CLOSE cur;
IF sub_count > 2 THEN
SELECT 'very good!' AS report;
ELSE
SELECT 'come on!' AS report;
END IF;
END$$
DELIMITER ;
```
其中,我们使用了一个游标(`CURSOR`)来遍历符合条件的成绩记录,并且使用了一个计数器(`sub_count`)来记录符合条件的科目数量。最后根据科目数量来输出相应的评价。
使用方法如下:
```
CALL do_query(12345);
```
其中 `12345` 是指定的学号。如果该学生有超过2个成绩高于85分的科目,则会输出very good!,并且输出该生的成绩单。否则,只输出come on!。
阅读全文