Databases
T02-003- Borrado de registros.
Enunciado
En el caso de que alguno de los registros que queremos eliminar esté siendo referenciado por algún otro registro de otra tabla con la que exista una relación, la sentencia
DELETEmostrará un error que impedirá que se lleve a cabo esa senencia.Ejemplo
La siguiente sentencia permite eliminar el país con identificador 'AR':
DELETE FROM countries
WHERE COUNTRY_ID = 'AR';
1 row(s) deleted.Como podemos observar, la sentencia se ejecuta sin error.
Ahora bien, si quisiéramos eliminar el país cuyo identificador fuera el 'IT':
DELETE FROM countries
WHERE COUNTRY_ID = 'IT';
ORA-02292: integrity constraint (LOC_C_ID_FK) violated - child record found ORA-06512Eso quiere decir que existen direcciones relacionadas con ese país, por lo que no se permite el borrado de dicho país.
Para poder eliminar cualquier país que tenga una dirección relacionada, en el caso de que fuera estrictamente necesario, primero deberíamos eliminar las referencias de las direcciones a ese país:
UPDATE locations
SET COUNTRY_ID = NULL
WHERE COUNTRY_ID = 'IT';
2 row(s) updated.
DELETE FROM countries
WHERE COUNTRY_ID = 'IT';
1 row(s) deleted.Podemos comprobar como, al haber eliminado las referencias a Italia, se nos ha permitido borrar dicho país.
Ejercicio
Elimina el trabajo 'ST_MAN'. En el caso de que exista algún empleado que actualmente esté realizando ese trabajo o que, según la tabla job_history, lo haya realizado en alguna ocasión, asígnale previamente el trabajo con 'ST_CLERK'.
Tipo
Solución
UPDATE HR.employees
SET JOB_ID = 'ST_CLERK'
WHERE JOB_ID = 'ST_MAN';
UPDATE HR.job_history
SET JOB_ID = 'ST_CLERK'
WHERE JOB_ID = 'ST_MAN';
DELETE FROM HR.jobs
WHERE JOB_ID = 'ST_MAN';
Prueba
SELECT EMPLOYEE_ID, JOB_ID, START_DATE
FROM HR.job_history
WHERE JOB_ID = 'ST_CLERK'
UNION
SELECT EMPLOYEE_ID, JOB_ID, HIRE_DATE
FROM HR.employees
WHERE JOB_ID = 'ST_CLERK'
LibrerÃas (Onfly databases)

