Ver Mensaje Individual
  #1 (permalink)  
Antiguo 15/04/2011, 02:33
guardianglorioso
 
Fecha de Ingreso: agosto-2006
Mensajes: 174
Antigüedad: 17 años, 9 meses
Puntos: 2
Problemas con trigger y el famoso error de "tablas mutantes"

Buenas gente,

La verdad es que no se como solventar este error que me ha sucedido. Se de donde proviene el error de tabla mutantes, y es debido a que dentro del trigger de actualizacion de la tabla, se hace un select sobre la misma tabla, y es por ello que da el error de "tablas mutantes".

El trigger basicamente realiza la funcion que que se dispara cuando hay una actualizacion sobre el campo X de la tabla T1. Y lo que se pretende con el trigger es que se haga una insercion en otra tabla de unos datos obtenidos de una consulta de tres tablas. Seria algo como esto:

CREATE OR REPLACE TRIGGER TG_SMS_TELEFONO
--BEFORE UPDATE
AFTER UPDATE
OF ESTADO
ON SMS_TELEFONO
REFERENCING NEW AS New OLD AS Old
FOR EACH ROW
BEGIN

insert into temporal_sms (telefono, mensaje, error, fecha, aplicacion, id, usuario, nif, datos, estado)
SELECT numero AS telefono,
texto AS mensaje,
decode (t.estado,
'ENVIADO', 'SMS Sended',
'PENDIENTE', 'PENDIENTE',
'ERROR_SUP_MAX_INTENTOS' , 'ERROR_SUP_MAX_INTENTOS',
'ERROR_EN_MENSAJE', 'ERROR_EN_MENSAJE' )
AS error,
fecha_recepcion AS fecha,
'SISPECAN-SMS' AS aplicacion,
seq_id_sms_log.NEXTVAL AS ID,
usuario_fk AS usuario,
campo1 AS nif,
'NULL' AS datos,
'NULL' AS estado
FROM sms_mensaje m,
sms_telefono t,
sms_mensajes2telefonos mt
WHERE m.ID = mt.mensajes_fk AND t.ID = mt.telefonos_fk
AND m.id = :new.id;

commit;

END TG_SMS_TELEFONO;
/


Muchas gracias de antemano ante una posible solucion!!!