MYSQL创建一个存储过程,有两个输入参数,xh和kch,如果成绩大于60分时,将该课程的学分累加计入该生的总学分,否则,总学分不变。
时间: 2024-06-13 21:08:44 浏览: 6
以下是MYSQL创建一个存储过程的代码,实现了有两个输入参数xh和kch,如果成绩大于60分时,将该课程的学分累加计入该生的总学分,否则,总学分不变的功能:
```sql
CREATE PROCEDURE add_credit(xh VARCHAR(10), kch VARCHAR(10))
BEGIN
DECLARE cj INT;
DECLARE xf INT;
DECLARE total_xf INT;
SELECT 成绩 INTO cj FROM XS_KC WHERE 学号=xh AND 课程号=kch;
SELECT 学分 INTO xf FROM KC WHERE 课程号=kch;
SELECT 总学分 INTO total_xf FROM XS WHERE 学号=xh;
IF cj > 60 THEN
SET total_xf = total_xf + xf;
END IF;
UPDATE XS SET 总学分 = total_xf WHERE 学号=xh;
END;
```
相关问题
7. 创建一个存储过程,有两个输入参数:xH1学号)和KCM(课程号),要求当 某学生某门课程的成绩小于 60 分时将其学分修改为零,大于或等于 60 分时将学分修改为 该课程的学分。
好的,以下是创建该存储过程的 SQL 代码:
```
CREATE PROCEDURE update_credit(
IN xH1 VARCHAR(20),
IN KCM VARCHAR(20)
)
BEGIN
DECLARE score INT;
DECLARE credit INT;
SELECT CJ INTO score FROM grade WHERE XH = xH1 AND KCH = KCM;
SELECT XF INTO credit FROM course WHERE KCH = KCM;
IF score < 60 THEN
UPDATE grade SET XF = 0 WHERE XH = xH1 AND KCH = KCM;
ELSE
UPDATE grade SET XF = credit WHERE XH = xH1 AND KCH = KCM;
END IF;
END;
```
这个存储过程接收两个输入参数:学号 xH1 和课程号 KCM。首先,它会从成绩表 grade 中查询该学生在该门课程的成绩,保存到变量 score 中;同时从课程表 course 中查询该门课程的学分,保存到变量 credit 中。然后,它会判断该学生的成绩是否小于 60 分,如果是,则将该门课程的学分修改为 0;否则将学分修改为该课程的学分。最后,存储过程结束。
有sc表 和student表 编写一个存储过程,名字自拟,有两个输入参数:学号和课程号,一个输出参数:分数。要求该存储过程接收学号和课程号的参数后,能修改成绩表中对应学号和课程号行的分数减掉5分,并把该修改过的分数外传、显示出来。
好的,以下是一个示例存储过程,用于修改成绩表中对应学号和课程号行的分数,然后将修改后的分数通过输出参数返回:
```
DELIMITER //
CREATE PROCEDURE update_grade(IN xh CHAR(10), IN kch CHAR(10), OUT fs INT)
BEGIN
DECLARE old_fs INT;
-- 获取旧的分数
SELECT Grade INTO old_fs
FROM sc
WHERE Sno = xh AND Cno = kch;
-- 修改分数
UPDATE sc
SET Grade = old_fs - 5
WHERE Sno = xh AND Cno = kch;
-- 获取新的分数
SELECT Grade INTO fs
FROM sc
WHERE Sno = xh AND Cno = kch;
END //
DELIMITER ;
```
这个存储过程的名称是 `update_grade`,它有两个输入参数:`xh`和`kch`,分别表示学号和课程号。它还有一个输出参数`fs`,表示修改后的分数。
首先,它从`sc`表中获取旧的分数,然后将分数减去5,并将新的分数更新到`sc`表中。最后,它再次从`sc`表中获取新的分数,并将它赋给输出参数`fs`,以便外部程序可以获取它。
你可以在调用存储过程时传递学号和课程号参数,例如:
```
CALL update_grade('10001', 'C001', @fs);
SELECT @fs;
```
这将调用存储过程,并将学号和课程号分别设置为`'10001'`和`'C001'`。它还将使用一个用户变量`@fs`来接收输出参数。最后,它将打印输出参数的值。