NECESITO REALIZAR SEGUIMIENTO A LOS DATOS DE LAS TABLAS DINAMICAMENTE
Publicado por TRIGGER DINAMICO - ORACLE 11G (2 intervenciones) el 31/05/2018 17:37:11
Buenos Días, estoy tratando de realizar auditoria de los datos de mi tablas, de una forma dinámica con el siguiente código:
en donde GE_VW_DICCIONARIO_DATOS es una vista de la tabla ALL_TAB_COLUMNS donde filtro las tablas que he creado, la idea es llamar a esta función desde cada Trigger de cada tabla, para insertar el comentario devuelto en una única tabla de auditoria con otros datos de control, el problema es con el EXECUTE IMMEDIATE con :NEW y :OLD me arroja ORA-01008: NO TODAS LAS VARIABLES HAN SIDO ENLAZADAS, si alguien tiene alguna idea de alguna solución?. Gracias de Antemano
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
create or replace function FN_GET_CAMPO_ACTUALIZADO(P_NOMBRE_TABLA VARCHAR)
return varchar2 AUTHID CURRENT_USER is
CURSOR REG_CAMPO IS
SELECT A.COLUMNA FROM GE_VW_DICCIONARIO_DATOS A WHERE TABLA = P_NOMBRE_TABLA;
N VARCHAR2(6) := ':NEW.';
O VARCHAR2(6) := ':OLD.';
V_CAMPO VARCHAR(100);
V_SQL VARCHAR2(500);
V_FILTRO VARCHAR2(1);
V_COMENTARIO VARCHAR2(500);
V_OLD_VALOR VARCHAR2(500);
V_NEW_VALOR VARCHAR2(500);
BEGIN
FOR REG_DET IN REG_CAMPO LOOP
V_CAMPO := REG_DET.COLUMNA;
V_SQL := 'SELECT DECODE(' || N || REG_DET.COLUMNA || ',' || O ||
REG_DET.COLUMNA || ',' || '1,0) FROM DUAL';
EXECUTE IMMEDIATE v_sql
INTO V_FILTRO;
IF V_FILTRO = 1 THEN
EXECUTE IMMEDIATE 'SELECT ' || N || REG_DET.COLUMNA || 'FROM DUAL'
INTO V_NEW_VALOR;
EXECUTE IMMEDIATE 'SELECT ' || O || REG_DET.COLUMNA || 'FROM DUAL'
INTO V_OLD_VALOR;
V_COMENTARIO := 'SE MODIFICO EL VALOR DEL CAMPO ' || V_CAMPO ||
' DE ' || V_OLD_VALOR || ' POR ' || V_NEW_VALOR;
END IF;
return V_COMENTARIO;
END LOOP;
exception
when others then
return SQLERRM;
END;
en donde GE_VW_DICCIONARIO_DATOS es una vista de la tabla ALL_TAB_COLUMNS donde filtro las tablas que he creado, la idea es llamar a esta función desde cada Trigger de cada tabla, para insertar el comentario devuelto en una única tabla de auditoria con otros datos de control, el problema es con el EXECUTE IMMEDIATE con :NEW y :OLD me arroja ORA-01008: NO TODAS LAS VARIABLES HAN SIDO ENLAZADAS, si alguien tiene alguna idea de alguna solución?. Gracias de Antemano
Valora esta pregunta
![Me gusta: Está pregunta es útil y esta clara Me gusta: Está pregunta es útil y esta clara](/img/img.png?11.51)
![NO me gusta: Está pregunta no esta clara o no es útil No me gusta: Está pregunta no esta clara o no es útil](/img/img.png?11.51)
0