superjorj

examen anul trecut

Jan 10th, 2016
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 2.67 KB | None | 0 0
  1. SET serveroutput ON;
  2. CREATE OR REPLACE PROCEDURE verifica_plati
  3.   (v_ordid ord.ordid%TYPE,
  4.   v_total ord.total%TYPE)
  5. IS
  6.   v_empno emp.empno%TYPE;
  7.   v_sal emp.sal%TYPE;
  8.   v_sal_nou emp.sal%TYPE;
  9.   v_sum ord.total%TYPE;
  10. BEGIN
  11.   UPDATE ord
  12.   SET total=total+v_total
  13.   WHERE ordid=v_ordid;
  14.   SELECT empno,sal,SUM(total)
  15.   INTO v_empno,v_sal,v_sum
  16.   FROM emp e join customer c ON
  17.   e.empno=c.repid join ord o ON
  18.   o.custid = c.custid
  19.   WHERE empno IN
  20.     (SELECT repid
  21.     FROM customer c join ord o ON
  22.     c.custid=o.custid
  23.     WHERE ordid=v_ordid)
  24.   GROUP BY empno,sal;
  25.     IF v_total > v_sal*10 THEN
  26.       SELECT losal
  27.       INTO v_sal_nou
  28.       FROM salgrade
  29.       WHERE grade =
  30.         (SELECT grade
  31.         FROM salgrade
  32.         WHERE v_sal BETWEEN losal AND hisal)+1;
  33.       UPDATE emp
  34.       SET sal=v_sal_nou
  35.       WHERE empno=v_empno;
  36.       END IF;
  37. END;
  38. /
  39. CREATE OR REPLACE TRIGGER trg_ver_plati
  40. after INSERT OR DELETE OR UPDATE OF itemtot ON item
  41. FOR each ROW
  42. BEGIN
  43.     IF inserting THEN
  44.       verifica_plati(:NEW.ordid,:NEW.itemtot);
  45.     ELSIF deleting THEN
  46.       verifica_plati(:old.ordid,-:old.itemtot);
  47.     ELSIF updating THEN
  48.       verifica_plati(:NEW.ordid,:NEW.itemtot);
  49.     END IF;
  50. END;
  51. /
  52. CREATE OR REPLACE PACKAGE pack_salgrade
  53. IS
  54.   PROCEDURE af_agent
  55.       (v_custid customer.custid%TYPE);
  56.   PROCEDURE af_client
  57.       (v_ordid ord.ordid%TYPE);
  58. END;
  59. /
  60. CREATE OR REPLACE PACKAGE BODY pack_salgrade
  61. IS
  62.   PROCEDURE af_agent
  63.       (v_custid customer.custid%TYPE)
  64.   IS
  65.       v_empno emp.empno%TYPE;
  66.       v_sal emp.sal%TYPE;
  67.       v_grad salgrade.grade%TYPE;
  68.       v_sum ord.total%TYPE;
  69.   BEGIN
  70.       SELECT empno,sal,grade,SUM(total)
  71.       INTO v_empno,v_sal,v_grad,v_sum
  72.       FROM emp e join customer c ON
  73.           c.repid=e.empno join ord o ON
  74.           o.custid=c.custid join salgrade
  75.           ON sal BETWEEN losal AND hisal
  76.       WHERE empno IN
  77.           (SELECT repid
  78.           FROM customer
  79.           WHERE custid=v_custid)
  80.       GROUP BY empno,sal,grade;
  81.       DBMS_OUTPUT.put_line('Agentul nr. '|| v_empno || ' are salariul ' || v_sal || ' ,gradul ' || v_grad||' si totalul platilor clientilor sai '||v_sum);
  82.   END af_agent;
  83.  
  84.   PROCEDURE af_client
  85.       (v_ordid ord.ordid%TYPE)
  86.   IS
  87.       v_custid customer.custid%TYPE;
  88.   BEGIN
  89.       SELECT custid
  90.       INTO v_custid
  91.       FROM ord
  92.       WHERE ordid=v_ordid;
  93.       af_agent(v_custid);
  94.   END af_client;
  95. END pack_salgrade;
  96. /
  97. BEGIN
  98.     DBMS_OUTPUT.put_line('Initial: ');
  99.     pack_salgrade.af_client(601);
  100.     INSERT INTO item(ordid,itemid,prodid,itemtot) VALUES (601,3,100860,20000);
  101.     DBMS_OUTPUT.put_line('Final: ');
  102.     pack_salgrade.af_client(601);
  103. END;
Advertisement
Add Comment
Please, Sign In to add comment