Ver Mensaje Individual
  #1  
Antiguo 10-03-2010
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.410
Reputación: 22
fjcg02 Va camino a la fama
Trigger auditoria

Hola a todos,
estoy intentando hacer un trigger que audite una serie de campos de varias tablas.

Como no quiero estar poniendo el churro de campos de cada tabla, estoy intentando hacer un trigger genérico que me ayude al menos a reutilizar el código.
El problema es que no consigo dar con el problema.

He aquí el código maldito
Código SQL [-]
AS
declare variable WCAMPO varchar(50);
declare variable sentencia varchar(100);
begin
  /* Trigger text */

  FOR SELECT RF.RDB$Field_Name CAMPO  /* Nombre del campo */
      FROM RDB$Relation_Fields RF
      WHERE RF.RDB$Relation_Name = 'TABLA' /* Aqui la tabla del trigger */
      INTO :WCAMPO
  DO
    BEGIN
      sentencia =  'IF (new.'||:WCAMPO ||'IS NOT NULL) THEN '||
       'BEGIN '||
         'IF (OLD.'||:WCAMPO||' <> NEW.'||:WCAMPO||' ) THEN ' ||
           'INSERT INTO AUDITORIA (IDAUDITORIA, FECHA, USUARIO, IDREGISTRO,'||
                                   'TABLA, CAMPO, VALORVIEJO,VALORNUEVO) '||
            'VALUES (GEN_ID(AUDITORIA,1), '||'''NOW'''||', NEW.USUARIOMODIF, NEW.IDPOLIZA,'||
                                 '''POLIZA'','||:WCAMPO||', CAST(OLD.'||:WCAMPO||' AS VARCHAR(50)),CAST( NEW.'||:WCAMPO||' AS VARCHAR(50)) )'';'||
       'END' ;
    END
    execute statement sentencia;

end
Pues eso, que me estoy haciendo la picha un lio.

Debo decir que si hago un store proc. que me devuelva la variable SENTENCIA - que es la que se ejecuta después con el execute statement - y la copio en el ibexpert, me la ejecuta bien

O sea, que estoy enrocado.

Agradecería cualquier ayuda de los maestros.

Gracias y un saludo
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita