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

Como crear un Trigger que guarde el Sql.

Estas en el tema de Como crear un Trigger que guarde el Sql. en el foro de Oracle en Foros del Web. Hola a todos, por favor necesito que alguien me indique como hacer un Trigger que me guarde el Query que están ejecutando. Bien sea insert, ...
  #1 (permalink)  
Antiguo 06/06/2008, 21:17
 
Fecha de Ingreso: junio-2008
Mensajes: 6
Antigüedad: 16 años, 5 meses
Puntos: 0
Como crear un Trigger que guarde el Sql.

Hola a todos, por favor necesito que alguien me indique como hacer un Trigger que me guarde el Query que están ejecutando. Bien sea insert, delete o update.

Ejemplo, quiero guardar esto en una tabla de auditoria:

Insert into mi_tabla values (123456,'ANDRES','GUZMAN').


Agradeciendo de antemano la colaboración prestada.


Andrés Guzmán B.
  #2 (permalink)  
Antiguo 09/06/2008, 01:14
 
Fecha de Ingreso: junio-2007
Mensajes: 891
Antigüedad: 17 años, 5 meses
Puntos: 43
Respuesta: Como crear un Trigger que guarde el Sql.

Mira a ver si puedes rescatar esa sentencia de V$SQLAREA
  #3 (permalink)  
Antiguo 09/06/2008, 09:52
 
Fecha de Ingreso: junio-2008
Mensajes: 6
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: Como crear un Trigger que guarde el Sql.

Hola jc3000, este es el Trigger que captura el SQL, pero cuando se hace una transacción en la tabla a Auditar, me esta guardando el antepenúltimo SQL, Ejem: Si hago un Insert y luego un Update me guarda el Insert, posteriormente hago un select y me guarda el Update. Lo he cambiado al derecho y al revés, y nada, no encuentro la forma.

Muchísimas gracias de antemano por tu atención.


DECLARE
SQ VARCHAR(255);
FC VARCHAR(255);
BEGIN
select distinct
vs.sql_text,
to_char(to_date(vs.first_load_time,'YYYY-MM-DD/HH24:MI:SS'),'MM/DD HH24:MI:SS') first_load_time into SQ,FC
from
v$sqlarea vs,
all_users au
where (parsing_user_id != 0)
and (au.user_id(+)=vs.parsing_user_id)
and au.username=user
and first_load_time=(select max(first_load_time)
from v$sqlarea vs ,all_users au
where (parsing_user_id != 0)
and (au.user_id(+)=vs.parsing_user_id)
and au.username=user
and (executions >= 1))
and (executions >= 1)
and rownum = 1
order by first_load_time desc;
INSERT INTO AUD_PAGO
VALUES
(SQ,USER,SYSDATE,USERENV('TERMINAL'));
END;
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

SíEste tema le ha gustado a 1 personas (incluyéndote)




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