Advertisement
JosepRivaille

BD - AA: Triggers

Apr 19th, 2016
812
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /* Es desitja saber en tot moment quin usuari ha inserit cadascuna de les tuples de la taula Treballadors del fitxer adjunt. Es vol utilitzar per guardar aquesta informació l'atribut "usuari" de la taula Treballadors.
  2.  
  3. Per mantenir aquesta informació disposem ja d'un disparador (que també podeu trobar al fitxer adjunt). Aquest disparador agafa com a nom de l'usuari que fa la inserció, el que es troba a l'única fila de la taula Usuari_actual.
  4.  
  5. Implementar una solució alternativa que redueixi el nombre d'accessos a la base de dades. Aquesta solució alternativa s'ha de basar en aprofitar les possibilitats que dóna la variable NEW. A l'hora de fer aquest exercici és especialment important haver entès la transparència 220 i l'exemple de la 229.
  6.  
  7. Pel joc de proves que trobareu al fitxer adjunt,i després de l'execució de lles sentències:
  8. insert into treballadors values(1,1000,NULL);
  9. insert into treballadors values(2,2000,NULL);
  10. l'extensió de la taula Treballadors ha de ser:
  11.  
  12. num_treballador     salari      usuari
  13. 1       1000        bd0003
  14. 2       2000        bd0003
  15. */
  16.  
  17. -- create table treballadors (num_treballador integer primary key, salari integer, usuari char(30));
  18. -- create table usuari_actual(usuari char(10));
  19. -- insert into usuari_actual values('bd0003');
  20.  
  21. CREATE or replace FUNCTION auditoria() RETURNS trigger AS $$
  22.     DECLARE
  23.         us char(30);
  24.     BEGIN
  25.         us := (select usuari from usuari_actual);
  26.         NEW.usuari = us;
  27.         RETURN NEW;
  28.     END;
  29.     $$LANGUAGE plpgsql;
  30.  
  31. CREATE TRIGGER ex172 BEFORE INSERT ON treballadors  FOR EACH ROW EXECUTE PROCEDURE auditoria();
  32.  
  33. -- insert into treballadors values(1,1000,NULL);
  34. -- insert into treballadors values(2,2000,NULL);
  35.  
  36. -- JosepRivaille
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement