Tema: triggers
Ver Mensaje Individual
  #7 (permalink)  
Antiguo 12/05/2010, 08:55
Avatar de huesos52
huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: triggers

En este caso te propongo algo que no me gusta mucho, pero que puede funcionarte.

Y es hacer uso de rules.

Es un mecanismo similar a los triggers pero que no afecta cada registro, sino un conjunto de reglas.

Lo que te digo que no me gusta, es hacer un create replace de la regla cada que haya una inserción u operación DML para poder capturar el usuario que dices es el parametro.

Te lo muestro en este ejemplo:
Código SQL:
Ver original
  1. pruebas=> CREATE TABLE yoelvis(id INTEGER);
  2. CREATE TABLE
  3. pruebas=> CREATE TABLE yoelvis_auditoria(fecha DATE,id INTEGER);
  4. CREATE TABLE
  5. pruebas=> CREATE OR REPLACE RULE yoelvis_insert AS ON INSERT TO yoelvis DO INSERT INTO yoelvis_audit
  6. oria VALUES(TO_DATE('1984-11-12','YYYY-MM-DD'),NEW.id);
  7. CREATE RULE
  8. pruebas=> INSERT INTO yoelvis VALUES(1);
  9. INSERT 0 1
  10. pruebas=> INSERT INTO yoelvis VALUES(2);
  11. INSERT 0 1
  12. pruebas=> SELECT *FROM yoelvis_auditoria;
  13.    fecha    | id
  14. ------------+----
  15.  1984-11-12 |  1
  16.  1984-11-12 |  2
  17. (2 filas)
  18.  
  19. pruebas=> CREATE OR REPLACE RULE yoelvis_insert AS ON INSERT TO yoelvis DO INSERT INTO yoelvis_audit
  20. oria VALUES(TO_DATE('1984-11-13','YYYY-MM-DD'),NEW.id);
  21. CREATE RULE
  22. pruebas=> INSERT INTO yoelvis VALUES(1);
  23. INSERT 0 1
  24. pruebas=> SELECT *FROM yoelvis_auditoria;
  25.    fecha    | id
  26. ------------+----
  27.  1984-11-12 |  1
  28.  1984-11-12 |  2
  29.  1984-11-13 |  1
  30. (3 filas)

En este caso, la fecha se comporta como el parámetro de entrada (Que en tu caso sería el usuario) pero ara que sea dinámico, requiere ejecutar el CREATE OR REPLACE RULE desde el lenguaje para que inserte el valor que se espera.

Yo realmente optaría por añadir a cada tabla original un campo para almacenar el user y pasarselo como valor NEW u OLD al trigger y que haga la operación DML automática.

EDITO: se me adelantó calakra
__________________
Without data, You are another person with an opinion.
W. Edwads Deming