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.