对于标准的ORACLE sql示例表EMP,架构包含EMPNO是主键,MGR是当前员工的直接管理器的EMPNO(外键是指表本身)。
问题1:如何编写递归sql过程来删除一个管理器并诅咒删除在该管理器下工作的所有人 ,包括那些没有直接向他或她报告的人?
问题2:可以通过从重复基表创建的视图中删除来完成吗?
答案 0 :(得分:0)
可以使用单个删除语句完成。
您需要使用HIERARCHICAL
查询选择层次结构中的所有员工,然后将其删除。
例如,删除标准ORACLE sql示例表7566
中的EMPNO EMP
(JONES)下的所有员工
DELETE FROM EMP WHERE EMPNO IN
(SELECT EMPNO
FROM EMP
CONNECT BY PRIOR EMPNO = MGR
START WITH EMPNO=7566);
一切顺利:)
答案 1 :(得分:0)
是的,可以根据表格使用 VIEW ,并在视图上使用 INSTEAD OF DELETE ON 触发器。
根据员工表创建视图
CREATE VIEW EMPLOYEE_VIEW AS SELECT * FROM EMPLOYEES;
在视图上创建以下触发器
CREATE OR REPLACE TRIGGER EMPLOYEE_VIEW_DEL INSTEAD OF DELETE ON
EMPLOYEE_VIEW
FOR EACH ROW
BEGIN
DELETE FROM EMPLOYEES WHERE MANAGER_ID =:OLD.EMPLOYEE_ID;
END;
/
这应该可行,这样可以避免变异表错误ORA-04091变异表错误!
和平!