Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Oracle (https://www.clubdelphi.com/foros/forumdisplay.php?f=22)
-   -   Trigger y campo CLOB (https://www.clubdelphi.com/foros/showthread.php?t=38437)

juanmdq 14-12-2006 17:15:07

Trigger y campo CLOB
 
Hola a todos:
Dejo esta pregunta en el foro porque luego de buscar un rato largo por internet no encontre nada que haga referencia al problema que tengo.
El problema es que para realizar la auditoria de unas tablas tenemos definidos unos triggers(el trigger hace simplemente un insert en otra tabla con la misma estructura de la tabla a auditar). hasta ahora no teniamos problemas,HASTA QUE creamos una tabla con un campo de tipo CLOB.
El tema esta en que en la tabla de auditoria el valor del campo CLOB nunca se setea, sin embargo el valor en la tabla origen existe.

Código SQL [-]
CREATE OR REPLACE TRIGGER AUDITATABLAX
AFTER DELETE OR INSERT OR UPDATE
ON TABLAX
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
DECLARE
    estado VARCHAR(10);

BEGIN
    IF DELETING THEN
        estado := 'BAJA';
        INSERT INTO AUDITREQUERIMIENTOS (
                    FECHA,
                    estado,
                    OTROSDATOS,
                    OBSERVACIONES)
          VALUES(   
                    SYSDATE,
                    estado,
                    :OLD.OTROSDATOS,
                    :OLD.OBSERVACIONES
          );

    ELSIF INSERTING OR UPDATING THEN
        IF INSERTING THEN  estado := 'ALTA';
        ELSIF UPDATING THEN estado := 'MODI';
        END IF;

        INSERT INTO AUDITREQUERIMIENTOS (
                    FECHA,
                    estado,
                    OTROSDATOS,
                    OBSERVACIONES)
          VALUES(   
                    SYSDATE,
                    estado,
                    :NEW.OTROSDATOS,
                    :NEW.OBSERVACIONES
          );

    END IF;

END;

por ejemplo si inserto un registro con los valores
otrosdatos = 'PRUEBA' y
observaciones = 'OBSERVACIONES DE PRUEBA'

en la tabla de auditoria obtengo
SYSDATE estado OTROSDATOS OBSERVACIONES
14/12/2006 'ALTA' 'PRUEBA'

si modifico el registro anterior pasa exactamento lo mismo.
modifico 'PRUEBA' por 'OTRA PRUEBA'

en la tabla de auditoria obtengo
SYSDATE estado OTROSDATOS OBSERVACIONES
14/12/2006 'ALTA' 'PRUEBA'
14/12/2006 'MODI' 'OTRA PRUEBA'


Por curiosidad probe de cambiar el trigger para que en vez de insertar en la tabla de auditoria el nuevo valor (:NEW.OBSERVACIONES) inserte el viejo (:OLD.OBSERVACIONES), y el valor viejo lo obtiene y lo inserta correctamente.


Si alguien tiene una idea de lo que puede estar pasando, o se le ocurre alguna prueba que pueda realizar le agradeceria mucho que lo comente.

desde ya muchas gracias.



P.D.:Version de oracle
Oracle Database 10g Enterprise Edition Release 10.1.0.3.0 - Prod
PL/SQL Release 10.1.0.3.0 - Production
CORE 10.1.0.3.0 Production
TNS for Linux: Version 10.1.0.3.0 - Production

juanmdq 15-12-2006 14:01:56

Hola de nuevo.
Aca dejo un link a un hilo en otro foro donde se plantea este problema.
Esta fue la explicacion mas clara que encontre, igual no deja muy claro cual es el problema de fondo.
Si alguien encuentra algun dato mas seria interesante que lo postee.

http://www.orafaq.com/forum/t/47865/2/

Hasta luego y gracias.


La franja horaria es GMT +2. Ahora son las 16:28:40.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi