【发布时间】:2020-11-01 14:44:04
【问题描述】:
所以我想为一个部门聘请一位新经理。此过程有 2 个参数,我要更改的部门名称和经理的新 id(取自员工的 id)。所以要更改它,我需要更新所有具有旧经理 ID 的员工,并将他们的经理 ID 更改为新的。这是我到目前为止的代码,问题是它更新了所有员工的经理,所以整个数据库都被更新了。我必须使用程序,而不是函数。任何的想法?谢谢。
CREATE OR REPLACE PROCEDURE update_manager(v_deptname IN departments.department_name%TYPE,v_empid IN employees.employee_id%TYPE) IS
v_deptid departments.department_id%type;
BEGIN
SELECT department_id INTO v_deptid FROM departments WHERE department_name=v_deptname;
FOR i IN (SELECT * FROM employees)
LOOP
IF i.department_id=v_deptid THEN
UPDATE employees
SET manager_id=v_empid
WHERE i.department_id=v_deptid;
END IF;
END LOOP;
END;
/
BEGIN
update_manager('Marketing',100);
END;
/
【问题讨论】:
-
看来员工的经理是由员工所在的部门决定的。也就是说,部门(dept_id)和经理之间是一对一的关系。如果是这样,您的问题来自有缺陷的数据模型。无需将经理与员工一起存储。只需将employee.dept_id 作为FK 返回department.dept_id。那么如果需要了解员工的经理,就加入employee.dpt_id = department.dept_id