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

DML

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)