¿Que son tablas mutantes?
Por otro lado en este tipo de tablas hay dos tipos de restricciones, las cuales se presentan a continuación:
1. Las instrucciones de un row trigger no pueden ni leer ni modificar una tablaque está mutando.
2. Las instrucciones de un row trigger no pueden cambiar ni la clave primaria, ni claves foráneas, ni atributos únicos de tablas que estén restringiendo. Esta restricción tieneuna excepción: un before row trigger disparado por un INSERT de una sola fila de una tabla con una clave foránea, puede modificar cualquier columna de la tabla primaria siempre que no se viole ningunade las restricciones de integridad referencial.
Los ERRORES por Tablas Mutantes se detectan y se generan en Tiempo de Ejecución y no de Compilación (ORA-4091).
Ejemplo de Tablas Mutantes
Acontinuación la descripción de el disparador que da lugar a las tablas mutantes.
Este será un disparador que modifique el número de empleados de un departamento (columna Departamentos.Num_Emp) cadavez que sea necesario. Ese número cambia al INSERTAR o BORRAR uno o más empleados, y al MODIFICAR la columna Dpto de la tabla Empleados, para uno o varios empleados. La tabla Departamentos es unatabla de restricción de la tabla Empleados, pero el Disparador es correcto, porque modifica Num_Emp, que no es la clave primaria. Este disparador no puede consultar la tabla Empleados, ya que esa tabla esmutante (por ejemplo, esta instrucción no sería válida: SELECT COUNT(*) INTO T FROM Empleados WHERE Dpto = :new.Dpto;)
CREATE OR REPLACE TRIGGER Cuenta_Empleados
BEFORE DELETE OR INSERT ORUPDATE OF Dpto ON Empleados
FOR EACH ROW
BEGIN
IF INSERTING THEN
UPDATE Departamentos SET Num_Emp = Num_Emp+1
WHERE NumDpto=:new.Dpto;
ELSIF UPDATING THEN
UPDATE Departamentos SET Num_Emp...
Regístrate para leer el documento completo.