1.编写一个存储过程,名字自拟,有两个输入参数:系部名称、性别。要求给该存储过程传递系部名称和性别后,能修改该系部和该性别对应行的年龄,把年龄减掉3岁。比如传给的值是cs和男,则计算机系的男生年龄全部减掉3岁。执行该存储过程并检查结果。
时间: 2024-03-27 20:38:05 浏览: 17
好的,根据您的需求,我为您编写了以下的 MySQL 存储过程,名称为 `update_age_by_dept_gender`,可以实现您的需求:
```mysql
CREATE PROCEDURE update_age_by_dept_gender(IN dept_name VARCHAR(50), IN gender VARCHAR(10))
BEGIN
UPDATE students SET age = age - 3 WHERE department = dept_name AND sex = gender;
END;
```
该存储过程有两个输入参数,分别为系部名称和性别,根据这两个参数可以找到对应的学生行,再将其年龄减少3岁。您可以在执行该存储过程前,将 `students` 表格中的数据进行适当的修改,以便进行测试。
执行该存储过程的 SQL 语句如下:
```mysql
CALL update_age_by_dept_gender('计算机系', '男');
```
该语句会将计算机系男生的年龄减少3岁。您可以根据自己的需求修改该语句中的参数,进行测试。
相关问题
1. 编写一个存储过程,名字自拟,有两个输入参数:系部名称、性别。要求给该存储过程传递系部名称和性别后,能修改该系部和该性别对应行的年龄,把年龄减掉3岁。比如传给的值是cs和男,则计算机系的男生年龄全部减掉3岁。执行该存储过程并检查结果。
可以编写如下的存储过程,命名为`update_age_by_dept_gender`:
```
CREATE PROCEDURE update_age_by_dept_gender(IN dept_name VARCHAR(50), IN gender VARCHAR(10))
BEGIN
UPDATE students
SET age = age - 3
WHERE department = dept_name AND sex = gender;
END;
```
该存储过程有两个输入参数,分别是系部名称和性别。它会根据传入的参数,找到对应的行,并将年龄减去3岁。
执行该存储过程的方法如下:
```
CALL update_age_by_dept_gender('cs', '男');
```
这会将计算机系男生的年龄全部减去3岁。你可以通过查询`students`表,来检查是否成功修改了数据。
有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`来接收输出参数。最后,它将打印输出参数的值。