Advertisement
JosepRivaille

BD - AA: Triggers2

Apr 26th, 2016
372
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. -- 1)
  2.  
  3. DROP TABLE DEPARTAMENTS CASCADE;
  4. DROP TABLE PROJECTES CASCADE;
  5. DROP TABLE EMPLEATS CASCADE;
  6. DROP TABLE missatgesExcepcions CASCADE;
  7.  
  8.  
  9. CREATE TABLE DEPARTAMENTS
  10.          (        NUM_DPT INTEGER,
  11.         NOM_DPT CHAR(20),
  12.         PLANTA INTEGER,
  13.         EDIFICI CHAR(30),
  14.         CIUTAT_DPT CHAR(20),
  15.         PRIMARY KEY (NUM_DPT));
  16.  
  17. CREATE TABLE PROJECTES
  18.          (        NUM_PROJ INTEGER,
  19.         NOM_PROJ CHAR(10),
  20.         PRODUCTE CHAR(20),
  21.         PRESSUPOST INTEGER,
  22.         PRIMARY KEY (NUM_PROJ));
  23.  
  24. CREATE TABLE EMPLEATS
  25.          (        NUM_EMPL INTEGER,
  26.         NOM_EMPL CHAR(30),
  27.         SOU INTEGER,
  28.         CIUTAT_EMPL CHAR(20),
  29.         NUM_DPT INTEGER,
  30.         NUM_PROJ INTEGER,
  31.         PRIMARY KEY (NUM_EMPL),
  32.         FOREIGN KEY (NUM_DPT) REFERENCES DEPARTAMENTS (NUM_DPT),
  33.         FOREIGN KEY (NUM_PROJ) REFERENCES PROJECTES (NUM_PROJ));
  34.  
  35. create table missatgesExcepcions(
  36.         num integer,
  37.         texte varchar(50)
  38.         );
  39.  
  40. insert into missatgesExcepcions values(1,'No es pot esborrar. Hi ha empleats del departament');
  41. insert into missatgesExcepcions values(2,'El departament no existeix');
  42. insert into missatgesExcepcions values(3,'Error Intern');
  43.  
  44. INSERT INTO  DEPARTAMENTS VALUES (1,'Vendes',10,'World Trade Center','Barcelona');
  45. INSERT INTO  DEPARTAMENTS VALUES (2,'Compres',10,'World','Barcelona');
  46.  
  47. INSERT INTO  PROJECTES VALUES (1,'IBDTEL','TELEVISIO',1000000);
  48.  
  49. INSERT INTO  EMPLEATS VALUES (1,'Carme',400000,'MATARO',2,1);
  50. INSERT INTO  EMPLEATS VALUES (2,'Eugenia',350000,'TOLEDO',2,1);
  51. INSERT INTO  EMPLEATS VALUES (3,'Josep',250000,'SITGES',2,1);
  52.  
  53. CREATE OR REPLACE FUNCTION eliminar_dept(numdept integer) RETURNS void AS $$
  54. DECLARE
  55.    missatge varchar(50);
  56.  
  57. BEGIN
  58.      IF EXISTS (SELECT * FROM EMPLEATS e WHERE e.num_dpt = numdept)
  59.     THEN
  60.         SELECT texte INTO missatge FROM missatgesExcepcions WHERE num=1;
  61.         RAISE EXCEPTION '%',missatge;
  62.      END IF;
  63.  
  64.      DELETE FROM departaments WHERE num_dpt = numdept;
  65.      
  66.      IF NOT FOUND THEN
  67.        SELECT texte INTO missatge FROM missatgesExcepcions WHERE num=2;
  68.            RAISE EXCEPTION '%',missatge;
  69.      END IF;
  70.  
  71. EXCEPTION
  72.    WHEN raise_exception THEN
  73.            RAISE EXCEPTION '%',SQLERRM;
  74.    WHEN OTHERS THEN
  75.            SELECT texte INTO missatge FROM missatgesExcepcions WHERE num=3;
  76.            RAISE EXCEPTION '%',missatge;
  77.  
  78. END;
  79. $$LANGUAGE plpgsql;
  80.  
  81. -- 2)
  82.  
  83.  
  84.  
  85. -- JosepRivaille
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement