1 使用teacher表(tno(教师编号),tname(教师姓名)deptno(部门号)), 和 dept表(deptno(部门编号),dname(部门名))完成下面练习 创建一个存储过程,以教师编号和部门号作为参数,修改教师所在的部门为所输入的部门号。 --如果修改成功,则显示“教师由……号部门调入……号部门”; 如果不存在该教师,则显示--“教师编号不存在,请输入正确的教师编号。”; 如果不存在该部门,则显示--“该部门不存在,请输入正确的部门号。”。
时间: 2023-07-15 16:11:36 浏览: 148
下面是实现该存储过程的代码:
```mysql
DELIMITER $$
CREATE PROCEDURE update_teacher_dept(
IN tno_input INT,
IN deptno_input INT
)
BEGIN
DECLARE tname_val VARCHAR(20);
DECLARE dname_val VARCHAR(20);
DECLARE dept_count INT;
-- 检查教师编号是否存在
SELECT COUNT(*) INTO @tcount FROM teacher WHERE tno = tno_input;
IF @tcount = 0 THEN
SELECT "教师编号不存在,请输入正确的教师编号。" AS message;
LEAVE update_teacher_dept_proc;
END IF;
-- 检查部门编号是否存在
SELECT COUNT(*) INTO dept_count FROM dept WHERE deptno = deptno_input;
IF dept_count = 0 THEN
SELECT "该部门不存在,请输入正确的部门号。" AS message;
LEAVE update_teacher_dept_proc;
END IF;
-- 更新教师所在部门
UPDATE teacher SET deptno = deptno_input WHERE tno = tno_input;
SET tname_val = (SELECT tname FROM teacher WHERE tno = tno_input);
SET dname_val = (SELECT dname FROM dept WHERE deptno = deptno_input);
SELECT CONCAT("教师由 ", tno_input, " 号部门调入 ", deptno_input, " 号部门") AS message;
update_teacher_dept_proc:
END$$
DELIMITER ;
```
在该存储过程中,首先检查输入的教师编号和部门编号是否存在。如果不存在,则输出相应的错误信息并结束存储过程。如果存在,则更新教师所在的部门,并输出成功信息。
使用该存储过程的示例代码如下:
```mysql
CALL update_teacher_dept(1001, 2); -- 将教师 1001 调入部门 2
CALL update_teacher_dept(1004, 3); -- 将教师 1004 调入部门 3
CALL update_teacher_dept(1005, 5); -- 教师编号不存在,请输入正确的教师编号。
CALL update_teacher_dept(1002, 6); -- 该部门不存在,请输入正确的部门号。
```
注意,在调用存储过程时,需要传入教师编号和部门编号作为参数。
阅读全文