Ver Mensaje Individual
  #8 (permalink)  
Antiguo 10/07/2008, 11:36
OscarH
 
Fecha de Ingreso: junio-2008
Ubicación: D.F.
Mensajes: 62
Antigüedad: 15 años, 10 meses
Puntos: 1
Respuesta: NOVATO: Problema con Triggers ¿como hacerlo?

QUE TAL PARA ELLO TENDRÍAS QUE HACER UN TRIGGER FOR UPDATE Y COMPARAR LOS NUEVOS VALORES CONTRA LOS
ANTERIORES, PARA DETERMINAR SI CAMBIARON, Y DESPUÉS CON ESA INFORMACIÓN INSERTAR EN LA OTRA TABLA.

TE ANEXO UN EJEMPLO DE LO QUE PODRÍAS HACER.

SQL> CREATE TABLE TEST_AUDIT (
2 ID_AUDIT NUMBER(5),
3 TABLA VARCHAR2(30),
4 COLUMNA VARCHAR2(30),
5 USUARIO VARCHAR2(30))
6 /

Tabla creada.

SQL>
SQL>
SQL>
SQL> CREATE TABLE TEST_UPDATE (
2 ID_TEST NUMBER(5),
3 TEST_DESC VARCHAR2(50),
4 TEST_STAT NUMBER(2))
5 /

Tabla creada.

SQL>
SQL>
SQL> CREATE OR REPLACE TRIGGER TEST_AUDIT_TRIGGER BEFORE UPDATE ON TEST_UPDATE
2 REFERENCING NEW AS NEW OLD AS OLD
3 FOR EACH ROW
4 DECLARE
5 vnMaxim NUMBER(5);
6 vvTabla VARCHAR2(30) := 'TEST_UPDATE';
7 BEGIN
8
9 IF(:NEW.TEST_STAT <> :OLD.TEST_STAT)THEN
10 SELECT COUNT(id_audit) + 1
11 INTO vnMaxim
12 FROM test_audit;
13
14 INSERT INTO TEST_AUDIT (id_audit, tabla, columna, usuario)
15 VALUES (vnMaxim, vvTabla, 'TEST_STAT', USER);
16 END IF;
17
18 END;
19 /

Disparador creado.

SQL>
SQL>
SQL> INSERT INTO test_update (id_test, test_desc, test_stat)
2 VALUES (1, 'ESTATUS ORIGINAL', 1)
3 /

1 fila creada.

SQL>
SQL> SELECT * FROM TEST_AUDIT
2 /

ninguna fila seleccionada

SQL>
SQL> UPDATE test_update
2 SET test_stat = 2
3 WHERE id_test = 1
4 /

1 fila actualizada.

SQL>
SQL> SELECT * FROM TEST_AUDIT
2 /

ID_AUDIT TABLA COLUMNA USUARIO
---------- ------------------------------ ------------------------------ ------------------------------
1 TEST_UPDATE TEST_STAT OSCARH


ESPERO TE SEA DE UTILIDAD.

SALUDOS