Advertisement
JosepRivaille

BD - REPÀS: Triggers

May 1st, 2016
420
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. -- 1)
  2.  
  3. CREATE OR REPLACE FUNCTION check_conditions() RETURNS trigger AS $$
  4. DECLARE
  5.  
  6. BEGIN
  7.     IF NOT EXISTS (SELECT * FROM empleats2 e2 WHERE e2.ciutat2 = OLD.ciutat2) THEN
  8.         DELETE FROM empleats1 e1 WHERE e1.ciutat1 = OLD.ciutat2;
  9.     END IF;
  10.     RETURN NULL;
  11. END;
  12. $$LANGUAGE plpgsql;
  13.  
  14.  
  15. CREATE TRIGGER trig AFTER UPDATE OF ciutat2 OR DELETE ON empleats2
  16. FOR EACH ROW EXECUTE PROCEDURE check_conditions();
  17.  
  18. -- 2)
  19.  
  20. CREATE OR REPLACE FUNCTION check_conditions() RETURNS trigger AS $$
  21. DECLARE
  22.     missatge VARCHAR(100);
  23. BEGIN
  24.     IF NOT EXISTS (SELECT * FROM empleats2 e2 WHERE e2.ciutat2 = NEW.ciutat1) THEN
  25.         SELECT texte into missatge FROM missatgesExcepcions WHERE num = 1;
  26.         RAISE EXCEPTION '%', missatge;
  27.     END IF;
  28.    
  29.     RETURN NEW;
  30.  
  31.     EXCEPTION
  32.         WHEN raise_exception THEN
  33.             RAISE EXCEPTION '%', missatge;
  34. END;
  35. $$LANGUAGE plpgsql;
  36.  
  37.  
  38. CREATE TRIGGER trigger BEFORE INSERT OR UPDATE OF ciutat1 ON empleats1
  39. FOR EACH ROW EXECUTE PROCEDURE check_conditions();
  40.  
  41. -- 3)
  42.  
  43. CREATE OR REPLACE FUNCTION check_conditions1() RETURNS trigger AS $$
  44. BEGIN
  45.     DELETE FROM temp;
  46.     INSERT INTO temp(x, y) SELECT SUM(salari), 0 FROM empleats;
  47.     RETURN NULL;
  48. END;
  49. $$LANGUAGE plpgsql;
  50.  
  51. CREATE OR REPLACE FUNCTION check_conditions2() RETURNS trigger AS $$
  52. DECLARE
  53.     missatge VARCHAR(50);
  54.     sou_total INTEGER;
  55.     sou_esborrats INTEGER;
  56. BEGIN
  57.     UPDATE temp
  58.     SET y = y + OLD.salari;
  59.     SELECT x, y INTO sou_total, sou_esborrats FROM temp;
  60.     IF sou_esborrats >= sou_total - sou_esborrats THEN
  61.         SELECT texte INTO missatge FROM missatgesExcepcions WHERE num = 1;
  62.         RAISE EXCEPTION '%', missatge;
  63.     END IF;
  64.  
  65.     RETURN OLD;
  66.  
  67.         EXCEPTION
  68.                 WHEN raise_exception THEN
  69.                         RAISE EXCEPTION '%', missatge;
  70.  
  71. END;
  72. $$LANGUAGE plpgsql;
  73.  
  74. CREATE TRIGGER trigger1 BEFORE DELETE ON empleats
  75. FOR EACH STATEMENT EXECUTE PROCEDURE check_conditions1();
  76.  
  77. CREATE TRIGGER trigger2 BEFORE DELETE ON empleats
  78. FOR EACH ROW EXECUTE PROCEDURE check_conditions2();
  79.  
  80. -- 4)
  81.  
  82. CREATE OR REPLACE FUNCTION check_conditions() RETURNS trigger AS $$
  83. DECLARE
  84.     missatge VARCHAR(50);
  85. BEGIN
  86.     IF 'dijous' = (SELECT dia FROM dia) THEN
  87.         SELECT texte INTO missatge FROM missatgesExcepcions WHERE num = 1;
  88.         RAISE EXCEPTION '%', missatge;
  89.     END IF;
  90.     RETURN NULL;
  91.  
  92.     EXCEPTION
  93.         WHEN raise_exception THEN
  94.             RAISE EXCEPTION '%', missatge;
  95. END;
  96. $$LANGUAGE plpgsql;
  97.  
  98.  
  99. CREATE TRIGGER trigger BEFORE DELETE ON empleats
  100. FOR EACH STATEMENT EXECUTE PROCEDURE check_conditions();
  101.  
  102. -- 5)
  103.  
  104. CREATE OR REPLACE FUNCTION check_conditions() RETURNS trigger AS $$
  105. DECLARE
  106.     missatge VARCHAR(100);
  107. BEGIN
  108.     IF (TG_OP = 'DELETE') THEN
  109.         IF (OLD.nempl = 123) THEN
  110.             SELECT texte INTO missatge FROM missatgesExcepcions WHERE num = 1;
  111.             RAISE EXCEPTION '%', missatge;
  112.         END IF;
  113.         RETURN OLD;
  114.     END IF;
  115.     IF (TG_OP = 'UPDATE') THEN
  116.         IF (OLD.nempl = 123 AND NEW.nempl != 123) THEN
  117.             SELECT texte INTO missatge FROM missatgesExcepcions WHERE num = 1;
  118.             RAISE EXCEPTION '%', missatge;
  119.         END IF;
  120.         RETURN NEW;
  121.     END IF;
  122.  
  123.     EXCEPTION
  124.         WHEN raise_exception THEN
  125.             RAISE EXCEPTION '%', missatge;
  126. END;
  127. $$LANGUAGE plpgsql;
  128.  
  129. CREATE TRIGGER trigger BEFORE DELETE OR UPDATE OF nempl ON empleats
  130. FOR EACH ROW EXECUTE PROCEDURE check_conditions();
  131.  
  132. -- 6)
  133.  
  134. CREATE or replace FUNCTION auditoria() RETURNS trigger AS $$
  135. DECLARE
  136.     us char(30);
  137. BEGIN
  138.     us := (select usuari from usuari_actual);
  139.     NEW.usuari = us;
  140.     RETURN NEW;
  141. END;
  142. $$LANGUAGE plpgsql;
  143.  
  144. CREATE TRIGGER ex172 BEFORE INSERT ON treballadors
  145. FOR EACH ROW EXECUTE PROCEDURE auditoria();
  146.  
  147. -- 7)
  148.  
  149. CREATE OR REPLACE FUNCTION check_conditions() RETURNS trigger AS $$
  150. DECLARE
  151.     a_usuari CHAR(10);
  152. BEGIN
  153.     IF (TG_OP = 'INSERT') THEN
  154.         SELECT usuari INTO a_usuari FROM usuari_actual;
  155.         INSERT INTO auditoria VALUES(NEW.num_treballador, a_usuari);
  156.     END IF;
  157.     IF (TG_OP = 'DELETE') THEN
  158.         DELETE FROM auditoria a WHERE a.num_treballador = OLD.num_treballador;
  159.     END IF;
  160.     RETURN NULL;
  161. END;
  162. $$LANGUAGE plpgsql;
  163.  
  164. CREATE TRIGGER trigger AFTER INSERT OR DELETE ON treballadors
  165. FOR EACH ROW EXECUTE PROCEDURE check_conditions();
  166.  
  167. -- 8)
  168.  
  169. CREATE OR REPLACE FUNCTION check_conditions() RETURNS trigger AS $$
  170. DECLARE
  171.     a_usuari CHAR(10);
  172. BEGIN
  173.     SELECT usuari INTO a_usuari FROM usuari_actual;
  174.     NEW.usuari = a_usuari;
  175.     RETURN NEW;
  176. END;
  177. $$LANGUAGE plpgsql;
  178.  
  179. CREATE TRIGGER trigger BEFORE INSERT ON treballadors
  180. FOR EACH ROW EXECUTE PROCEDURE check_conditions();
  181.  
  182. -- JosepRivaille
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement