Triggers inválidos
Hola sindimad como estas hace poco me ayudaste con el tema de la auditoria por campos, he avanzado bastante y con la ejecución de FORMS_DDL he logrado hacer lo que necesito ahora tengo el siguiente problema.
Genero el código para el trigger y usando FORMS_DDL lo creo en la tabla pero se crea en estado INVALIDO, esto lo veo en el Toad, lo raro de esto es que si copio el código del trigger de la tabla y lo pego en el editor del Toad y lo ejecuto sin hacerle ningún cambio se genera en estado válido. El error que indica es el siguiente:
TRIGGER NAF47.TRG_ARCPCBPI
On line: 1
PLS-00103: Se ha encontrado el símbolo "" cuando se esperaba uno de los siguientes:
begin case declare exit for goto if loop mod null pragma
raise return select update while with <an identifier>
<a double-quoted delimited-identifier> <a bind variable> <<
close current delete fetch lock insert open rollback
savepoint set sql execute commit forall merge pipe
Y el codigo que genera el trigger es este:
NOTA: Tsh_audit. Alltrim y Tsh_Audit. Esquema son funciones en un paquete que yo cree para quitar espacios en blanco y obtener el esquema de trabajo respectivamente. CTabla lo obtengo de un campo en un bloque del form.
v_sql:='CREATE OR REPLACE TRIGGER TRG_'||TSH_AUDIT.Alltrim(cTabla)||CHR(13);
v_sql:=v_sql||'AFTER INSERT';
v_sql:=v_sql||' ON '||TSH_AUDIT.ESQUEMA||'.'||TSH_AUDIT.Alltrim(cTabla)||CHR(13);
v_sql:=v_sql||'FOR EACH ROW'||CHR(13);
v_sql:=v_sql||'BEGIN'||chr(13);
v_sql:=v_sql||' IF INSERTING THEN'||CHR(13);
v_sql:=v_sql||' Insert Into Aud_Repositorio'||CHR(13);
v_sql:=v_sql||' (id_e,id_a,usuario,descripcion,old_value,'||CHR(13);
v_sql:=v_sql||' no_reg,clave,ip_machine,datetime,new_value,'||CHR(13);
v_sql:=v_sql||' pc,accion,forma) '||CHR(13);
v_sql:=v_sql||' Values'||CHR(13);
v_sql:=v_sql||' (1,1,''usuario'',''probando el modulo de auditoria'',''old value'','||CHR(13);
v_sql:=v_sql||' 1,''campo modificado'',''192.148.30.24'','||CHR(13);
v_sql:=v_sql||' ''HORA'',''valor nuevo'',''pc'','||CHR(13);
v_sql:=v_sql||' ''I'',''nombre forma'');'||chr(13);
v_sql:=v_sql||' END IF;'||CHR(13);
v_sql:=v_sql||'END;';
FORMS_DDL(v_sql);
Gracias por tu tiempo y ayuda.
Genero el código para el trigger y usando FORMS_DDL lo creo en la tabla pero se crea en estado INVALIDO, esto lo veo en el Toad, lo raro de esto es que si copio el código del trigger de la tabla y lo pego en el editor del Toad y lo ejecuto sin hacerle ningún cambio se genera en estado válido. El error que indica es el siguiente:
TRIGGER NAF47.TRG_ARCPCBPI
On line: 1
PLS-00103: Se ha encontrado el símbolo "" cuando se esperaba uno de los siguientes:
begin case declare exit for goto if loop mod null pragma
raise return select update while with <an identifier>
<a double-quoted delimited-identifier> <a bind variable> <<
close current delete fetch lock insert open rollback
savepoint set sql execute commit forall merge pipe
Y el codigo que genera el trigger es este:
NOTA: Tsh_audit. Alltrim y Tsh_Audit. Esquema son funciones en un paquete que yo cree para quitar espacios en blanco y obtener el esquema de trabajo respectivamente. CTabla lo obtengo de un campo en un bloque del form.
v_sql:='CREATE OR REPLACE TRIGGER TRG_'||TSH_AUDIT.Alltrim(cTabla)||CHR(13);
v_sql:=v_sql||'AFTER INSERT';
v_sql:=v_sql||' ON '||TSH_AUDIT.ESQUEMA||'.'||TSH_AUDIT.Alltrim(cTabla)||CHR(13);
v_sql:=v_sql||'FOR EACH ROW'||CHR(13);
v_sql:=v_sql||'BEGIN'||chr(13);
v_sql:=v_sql||' IF INSERTING THEN'||CHR(13);
v_sql:=v_sql||' Insert Into Aud_Repositorio'||CHR(13);
v_sql:=v_sql||' (id_e,id_a,usuario,descripcion,old_value,'||CHR(13);
v_sql:=v_sql||' no_reg,clave,ip_machine,datetime,new_value,'||CHR(13);
v_sql:=v_sql||' pc,accion,forma) '||CHR(13);
v_sql:=v_sql||' Values'||CHR(13);
v_sql:=v_sql||' (1,1,''usuario'',''probando el modulo de auditoria'',''old value'','||CHR(13);
v_sql:=v_sql||' 1,''campo modificado'',''192.148.30.24'','||CHR(13);
v_sql:=v_sql||' ''HORA'',''valor nuevo'',''pc'','||CHR(13);
v_sql:=v_sql||' ''I'',''nombre forma'');'||chr(13);
v_sql:=v_sql||' END IF;'||CHR(13);
v_sql:=v_sql||'END;';
FORMS_DDL(v_sql);
Gracias por tu tiempo y ayuda.
1 respuesta
Respuesta de sindimad
1