Advertisement
JosepRivaille

BD - Pràctica de disparadors

Apr 20th, 2016
308
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. -- 1 -----------------------------------------------------------------------------
  2.  
  3. CREATE OR REPLACE FUNCTION check_restriction() RETURNS trigger AS $$
  4. DECLARE
  5.     missatge VARCHAR(100);
  6. BEGIN
  7.     SELECT texte INTO missatge FROM missatgesExcepcions WHERE num=1;
  8.     IF (TG_OP = 'DELETE') THEN
  9.         IF (OLD.nempl = 123) THEN RAISE EXCEPTION '%', missatge;
  10.         END IF;
  11.         RETURN OLD;
  12.     END IF;
  13.     IF (TG_OP = 'UPDATE') THEN
  14.         IF (OLD.nempl = 123 AND NEW.nempl != 123) THEN RAISE EXCEPTION '%', missatge;
  15.         END IF;
  16.         RETURN NEW;
  17.     END IF;
  18. END $$ LANGUAGE plpgsql;
  19.  
  20. CREATE TRIGGER trig1 BEFORE DELETE OR UPDATE OF nempl ON empleats
  21. FOR EACH ROW EXECUTE PROCEDURE check_restriction();
  22.  
  23.  
  24. -- 2 -----------------------------------------------------------------------------
  25.  
  26. CREATE OR REPLACE FUNCTION check_condition2() RETURNS trigger AS $$
  27. DECLARE
  28.     dia_actual char(10);
  29.     missatge varchar(50);
  30. BEGIN
  31.     SELECT dia INTO dia_actual FROM dia;
  32.     IF (dia_actual = 'dijous') THEN
  33.         SELECT texte INTO missatge FROM missatgesExcepcions WHERE num = 1;
  34.         RAISE EXCEPTION '%', missatge;
  35.     END IF;
  36.     RETURN NULL;
  37. END $$ LANGUAGE plpgsql;
  38.  
  39. CREATE TRIGGER trigger2 BEFORE DELETE ON empleats
  40. FOR EACH STATEMENT EXECUTE PROCEDURE check_condition2();
  41.  
  42.  
  43. -- 3 -----------------------------------------------------------------------------
  44.  
  45. CREATE OR REPLACE FUNCTION calcul_sou_abans() RETURNS trigger AS $$
  46. BEGIN
  47.     DELETE FROM temp;
  48.     INSERT INTO temp(x, y) SELECT SUM(salari), 0 FROM empleats;
  49.     RETURN NULL;
  50. END $$ LANGUAGE plpgsql;
  51.  
  52.  
  53. CREATE OR REPLACE FUNCTION check_condition3() RETURNS trigger AS $$
  54. DECLARE
  55.     sou_abans1 INTEGER;
  56.     suma_esb INTEGER;
  57.     missatge VARCHAR(50);
  58. BEGIN
  59.     UPDATE temp
  60.     SET y = y + OLD.salari;
  61.     SELECT x, y INTO sou_abans1, suma_esb FROM temp;
  62.     IF (suma_esb >= (sou_abans1 - suma_esb)) THEN
  63.         SELECT texte INTO missatge FROM missatgesExcepcions WHERE num = 1;
  64.         RAISE EXCEPTION '%', missatge;
  65.     END IF;
  66.     RETURN OLD;
  67. END $$ LANGUAGE plpgsql;
  68.  
  69. CREATE TRIGGER trigger4 BEFORE DELETE ON empleats
  70. FOR EACH STATEMENT EXECUTE PROCEDURE calcul_sou_abans();
  71.  
  72. CREATE TRIGGER trigger3 BEFORE DELETE ON empleats
  73. FOR EACH ROW EXECUTE PROCEDURE check_condition3();
  74.  
  75. -- JosepRivaille
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement