Tablas mutantes

maria
27 de Agosto del 2004
Hola, estoy realizando una practica en la que tengo 2 entidades (CUIDADOR y ANIMAL) relacionadas mediante una relacion m:n. La semantica del enunciado obliga a que por cada ocurrencia de la entidad animal este relacionada con 2 y SOLO 2 ocurrencias con la entidad CUIDADOR, por lo que tengo que comprobar que siempre haya dos ocurrencias en esa tabla intermedia para cada animal.
Al implementarlo con un TRIGGER, al hacer un select count sobre la tabla a la que esta asociado el trigger, supongo que me dira que existen TABLAS MUTANTES.
Mi pregunta es : ¿Como puedo resolver esto? ¿es el trigger la forma correcta?. Muchas gracias de antemano.

N?or
27 de Agosto del 2004
create or replace trigger cesarito_trg before insert on cesarito referencing new as new old as old for each row
declare
pragma autonomous_transaction;
valor integer;
forzar_salida exception;
begin
select count(*) into valor from cesarito where literal = :new.literal;
if valor > 1 then
dbms_output.put_line('Mas de 2 registros: ' || valor);
raise forzar_salida;end if;
end;
/

Disparador creado.

insert into cesarito values ( 'a1','a2','a3');

1 fila creada.

commit;

Validación terminada.

insert into cesarito values ( 'a1','a2','a3');

1 fila creada.

commit;

Validación terminada.

DBVRZ12-->insert into cesarito values ( 'a1','a2','a3');
insert into cesarito values ( 'a1','a2','a3')
*
ERROR en línea 1:
ORA-06510: PL/SQL: excepción definida por el usuario no tratada
ORA-06512: en "VRZ$NLARRALDE.CESARITO_TRG", línea 9
ORA-04088: error durante la ejecución del disparador 'VRZ$NLARRALDE.CESARITO_TRG'
Y obviamente esta excepción la tratás desde donde llamás al insert.