Databases
T02-006- Supresión de registros a partir de una consulta.
Enunciado
Con el objetivo de rejuvenecer la plantilla, la empresa ha ofrecido una jubilación anticipada a aquellos empleados con una antigüedad en la compañía de, al menos, 18 años. La muy sustanciosa indemnización ha dado lugar a que todos los empleados de esa antigüedad mayor o igual a 18 años hayan aceptado la jubilación anticipada, por lo que debes proceder al borrado de la información de esos empleados de nuestra base de datos.
No obstante, para poder efectuar el borrado de la información correspondiente a los empleados con antigüedad de, al menos, 18 años de la tabla de empleados deberás realizar las siguientes operaciones con antelación:
- si alguno de los empleados que se va a eliminar es jefe de algún departamento, se deberá poner a NULL el atributo MANAGER_ID del departamento correspondiente.
- si alguno de los empleados que se va a eliminar es superior de algún otro empleado, se deberá poner a NULL el atributo MANAGER_ID del empleado correspondiente.
- si alguno de los empleados que se va a eliminar consta en la tabla job_history, deberás eliminar los registros correspondientes.
Tipo
Solución
UPDATE HR.DEPARTMENTS SET MANAGER_ID = NULL
WHERE MANAGER_ID IN (
SELECT EMPLOYEE_ID FROM HR.EMPLOYEES
WHERE TRUNC(MONTHS_BETWEEN(CURRENT_DATE, HIRE_DATE) / 12) >= 18
);
UPDATE HR.EMPLOYEES SET MANAGER_ID = NULL
WHERE MANAGER_ID IN (
SELECT EMPLOYEE_ID FROM HR.EMPLOYEES
WHERE TRUNC(MONTHS_BETWEEN(CURRENT_DATE, HIRE_DATE) / 12) >= 18
);
DELETE FROM HR.JOB_HISTORY
WHERE EMPLOYEE_ID IN (
SELECT EMPLOYEE_ID FROM HR.EMPLOYEES
WHERE TRUNC(MONTHS_BETWEEN(CURRENT_DATE, HIRE_DATE) / 12) >= 18
);
DELETE FROM HR.EMPLOYEES
WHERE TRUNC(MONTHS_BETWEEN(CURRENT_DATE, HIRE_DATE) / 12) >= 18;
Prueba
SELECT EMPLOYEE_ID FROM HR.EMPLOYEES
WHERE TRUNC(MONTHS_BETWEEN(CURRENT_DATE, HIRE_DATE) / 12) >= 17
UNION
SELECT MANAGER_ID FROM HR.DEPARTMENTS WHERE MANAGER_ID IS NOT NULL
UNION
SELECT EMPLOYEE_ID FROM HR.JOB_HISTORY
UNION
SELECT DISTINCT MANAGER_ID FROM HR.EMPLOYEES
LibrerÃas (Onfly databases)

