Advertisement
Kimossab

ABD - ficha5

Nov 3rd, 2015
237
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 1.40 KB | None | 0 0
  1. /*a*/
  2. CREATE TABLE D AS SELECT * FROM dept;
  3. ALTER TABLE D add (saltotal NUMBER(7,2));
  4.  
  5. /*b*/
  6. DECLARE
  7.   v_sal D.saltotal%TYPE;
  8.  
  9.   CURSOR cl IS
  10.     SELECT deptno FROM D
  11.       FOR UPDATE OF saltotal;
  12.  
  13. BEGIN
  14.   FOR x IN cl
  15.   LOOP
  16.     SELECT SUM(sal) INTO v_sal FROM Emp WHERE deptno = x.deptno;
  17.     UPDATE D SET saltotal = v_sal WHERE CURRENT OF cl;
  18.   END LOOP;
  19. END;
  20.  
  21. /*c*/
  22. CREATE OR REPLACE TRIGGER c4
  23.   After DELETE OR INSERT OR UPDATE OF sal,deptno ON Emp
  24.   FOR Each ROW
  25.  
  26. DECLARE st D.saltotal%TYPE;
  27.  
  28. BEGIN
  29.   IF inserting THEN
  30.     SELECT saltotal INTO st FROM D WHERE deptno = :NEW.deptno;
  31.     IF st IS NULL THEN
  32.       UPDATE D SET saltotal = :NEW.sal WHERE deptno = :NEW.deptno;
  33.     ELSE
  34.       UPDATE D SET saltotal = st + :NEW.sal WHERE deptno = :NEW.deptno;
  35.     END IF;
  36.   END IF;
  37.   IF deleting THEN
  38.     UPDATE D SET saltotal = saltotal - :old.sal WHERE deptno = :old.deptno;
  39.   END IF;
  40.   IF updating THEN
  41.     IF :NEW.deptno = :old.deptno THEN
  42.       UPDATE D SET saltotal = saltotal - :old.sal + :NEW.sal WHERE deptno = :old.deptno;
  43.     ELSE
  44.       UPDATE D SET saltotal = saltotal - :old.sal WHERE deptno = :old.deptno;
  45.       UPDATE D SET saltotal = saltotal + :NEW.sal WHERE deptno = :NEW.deptno;
  46.     END IF;
  47.   END IF;
  48. END;
  49.  
  50. UPDATE Emp SET sal=100 WHERE deptno=30;
  51. DELETE FROM Emp WHERE empno = 1876;
  52. INSERT INTO Emp VALUES (1693,'Luis P','Prog',1934,'95.11.30',2000,NULL,10);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement