Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Oracle »

triggers en oracle

Estas en el tema de triggers en oracle en el foro de Oracle en Foros del Web. Saludos Mi pregunta es si es posible crear un trigger que haga un insert en una tabla, y que este trigger se dispare cuando se ...
  #1 (permalink)  
Antiguo 02/03/2012, 17:13
 
Fecha de Ingreso: septiembre-2011
Mensajes: 6
Antigüedad: 12 años, 6 meses
Puntos: 0
triggers en oracle

Saludos

Mi pregunta es si es posible crear un trigger que haga un insert en una tabla, y que este trigger se dispare cuando se este insertando en la misma tabla

es decir si tengo un trigger que inserta un persona en la tabla persona, y quiero que este se dispare cuando hago un insert en la tabla persona


porque me salio este error

04091. 00000 - "table %s.%s is mutating, trigger/function may not see it"
*Cause: A trigger (or a user defined plsql function that is referenced in
this statement) attempted to look at (or modify) a table that was
in the middle of being modified by the statement which fired it.
*Action: Rewrite the trigger (or function) so it does not read that table.
  #2 (permalink)  
Antiguo 06/03/2012, 18:28
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 16 años, 5 meses
Puntos: 85
Respuesta: triggers en oracle

Tienes que utilizar el pragma autonomous_transaction, esto hace que el código del trigger se ejecute en una transacción independiente de la sentencia que lo disparó, por ejemplo:

Código:
CREATE TRIGGER mi_trigger
   AFTER INSERT ON persona FOR EACH ROW
DECLARE
   PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
   INSERT INTO persona VALUES (xxx);
   COMMIT;
END;
/
Saludos
  #3 (permalink)  
Antiguo 07/03/2012, 01:49
 
Fecha de Ingreso: junio-2007
Mensajes: 891
Antigüedad: 16 años, 10 meses
Puntos: 43
Respuesta: triggers en oracle

Cita:
Iniciado por matanga Ver Mensaje
Tienes que utilizar el pragma autonomous_transaction, esto hace que el código del trigger se ejecute en una transacción independiente de la sentencia que lo disparó, por ejemplo:

Código:
CREATE TRIGGER mi_trigger
   AFTER INSERT ON persona FOR EACH ROW
DECLARE
   PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
   INSERT INTO persona VALUES (xxx);
   COMMIT;
END;
/
Saludos
Matanga, compañero ¿ que has puesto, por Dios ?.

Eso te va a reventar por todos los lados . Al hacer el primer insert se te va a disparar el trigger de manera infinita.


whitewater741, lo que tu planteas es imposible
  #4 (permalink)  
Antiguo 08/03/2012, 06:12
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: triggers en oracle

Cita:
Iniciado por jc3000 Ver Mensaje
Matanga, compañero ¿ que has puesto, por Dios ?.

Eso te va a reventar por todos los lados . Al hacer el primer insert se te va a disparar el trigger de manera infinita.


whitewater741, lo que tu planteas es imposible

Imposible y ademas, nada funcional.

saludos compañeros
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #5 (permalink)  
Antiguo 09/03/2012, 17:39
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 16 años, 5 meses
Puntos: 85
Respuesta: triggers en oracle

Cita:
Matanga, compañero ¿ que has puesto, por Dios ?.

Eso te va a reventar por todos los lados . Al hacer el primer insert se te va a disparar el trigger de manera infinita.
jc3000, mea culpa!!, tienes toda la razón del mundo, respondí por inercia al table is mutating sin pensar en la lógica del proceso, además lo acabo de probar y me hizo gracia el error de recursividad que genera el trigger.

Cita:
Imposible y ademas, nada funcional.
huesos52, también tienes razón, un insert sobre una tabla que dispare otro insert sobre la misma tabla no parece ser una funcionalidad correcta, pero hay veces que los usuarios prefieren respuestas al problema concreto en vez de sugerencias para diseñar una solución más óptima (evidentemente este no fue el caso:)

Saludos

Etiquetas: insert, sql, tabla, trigger
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:25.