Trigger dinamizando campos

Estoy creando triggers para auditoria de muchas tablas en ORACLE 9i. Deseo sabe cómo dinamizar, la comparación de los valores :old. Nombre del campo <> :nes. Nombre del campo
Pues debo compara más de 200 campos y NO quiero escribir uno a uno.
He tratado de llevar los nombres a un cursor, luego a una variable y concatenar así:
':old.'||s_variable
Pero aunque el trigger compila, no ejecuta correctamente.

1 respuesta

Respuesta
1
Lo que puedes hacer es hacer un bloque PL/sql o procedimiento que genere el código los triggers con un dbms_output consultando el nombre de los campos en el diccionario de datos.
Gracias por contestar tan pronto.
Lo que sucede es que de esta manera cada vez que cambie alguna de las 200 tablas a auditar, se hace necesario dar mantenimiento al trigger para incluir las nuevas.
Queremos evitar esto creándolo de manera dinámica de forma que funcione con n número de columnas en cualquier momento.
Otra pregunta:
Existe alguna manera en el Trigger de detectar cuál fue la columna de la tabla que se actualizó, ¿sin necesidad de preguntar uno por uno todos los campos de la misma?
Muy gentiles por la ayuda.
Siempre se puede hacer un script que después de hacer el alter de la tabla para añadir un campo, se lance y genere el código del trigger y se compile.
También puedes probar esto:
for v1 in c1 loop
 v_sql:='select :old.'||v1.campo||' from dual';
 execute immediate v_sql into v_val_old;
end loop;
Donde c1 es un cursor de all_tab_columns o user_tab_columns
Y lo mismo para los :new
Cuéntame si funciona.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas