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

Problema con Trigger

Estas en el tema de Problema con Trigger en el foro de Oracle en Foros del Web. Hola buenos días, estoy comenzando a desarrollar un trigger para hacer una bitacora sobre una tabla, para ello quiero hacer un clico el cual me ...
  #1 (permalink)  
Antiguo 10/10/2007, 10:32
 
Fecha de Ingreso: agosto-2003
Ubicación: Cancun
Mensajes: 97
Antigüedad: 20 años, 8 meses
Puntos: 0
Problema con Trigger

Hola buenos días, estoy comenzando a desarrollar un trigger para hacer una bitacora sobre una tabla, para ello quiero hacer un clico el cual me forme cadenas sql las cuales inserten los valores correspondientes en la tabla de auditoria, para ello, necesito conococer todas las columnas de la tabla en cuestión y como a futuro pienso agregar la auditoría en otras tablas se me hace "inflexible" escribir el nombre de todos los campos dentro del trigger. Dicho esto, mencione que el "select" que está en mi trigger no es aceptado, a la hora de ejecutar esas simplres líneas, me aparece un error diciendo que la tabla o vista no existe, he probado con user_tab_columns, dba_tab_columns y all_tab_columns (estas dos ultimas vistas me hacen agregar a la condición owner en el where, esto lo menciono para que no me digan que eso me hace falta)
sin más por el momento y en espera de su ayuda les envío un cordial saludo.


create or replace trigger t_bitacora_2 after update on XXXXX
for each row

DECLARE
total number;

BEGIN

select count(*) into total from USER_TAB_COLUMNS where TABLE_NAME='XXXXX';

END;
  #2 (permalink)  
Antiguo 29/10/2007, 13:17
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 16 años, 6 meses
Puntos: 85
Re: Problema con Trigger

Hola,

Tambien tienes la opcion de activar la auditoria de Oracle, que te permite auditar, entre muchas otras cosas, las operaciones DML y DDL sobre las tablas, guardando la informacion en la tabla sys.aud$. Encontraras mucha mas informacion en la documentacion de Oracle, pero basicamente tienes comandos similares a este.

Código:
AUDIT SELECT TABLE, INSERT TABLE, DELETE TABLE
      BY ACCESS
      WHENEVER NOT SUCCESSFUL;
Que audite todos las sentencias SELECT, INSERT y DELETE sobre todas las tablas por todos los usuarios cuando no son satisfactorias.

Ahora, en caso que te decidas por el trigger, te comento, que el error de que la tabla o vista no existe, se debe a que, para poder acceder a una tabla desde un bloque de codigo almacenado, sea procedimiento, funcion, trigger, etc debes tener asignado el privilegio de acceso al objeto directamente, y no a traves de un ROLE.

Esto es porque Oracle valida los permisos al momento de compilar, y no al momento de ejecutar y dado que los roles pueden cambiar, lo que se quiere evitar es que cuando se ejecute un bloque de codigo almacenado, se generen exepciones por falta de privilegios.

En conclusion, para poder hacer un select sobre la vista del diccionario dentro del trigger, debes

Código:
grant select on dba_tab_columns to user;
Saludos.
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:50.