Advertisement
Guest User

seminar5

a guest
Mar 22nd, 2017
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 2.91 KB | None | 0 0
  1. SET serveroutput ON;
  2.  
  3. DECLARE
  4.   CURSOR c IS SELECT nume, salariul FROM angajati
  5.   ORDER BY salariul DESC;
  6.  
  7.   r c%ROWTYPE;
  8. BEGIN
  9.   OPEN c;
  10.     LOOP
  11.       FETCH c INTO r;
  12.       EXIT WHEN c%notfound OR c%rowcount>10;
  13.       DBMS_OUTPUT.PUT_LINE('Angajatul '||r.nume||' are salariul ' || r.salariul);
  14.     END LOOP;
  15.   CLOSE c;
  16. END;
  17. /
  18.  
  19. DECLARE
  20.   CURSOR c IS SELECT nume, salariul FROM angajati
  21.   ORDER BY salariul DESC;
  22. BEGIN
  23.     FOR r IN c LOOP
  24.       EXIT WHEN c%rowcount>10;
  25.       DBMS_OUTPUT.PUT_LINE('Angajatul '||r.nume||' are salariul ' || r.salariul);
  26.     END LOOP;
  27. END;
  28. /
  29.  
  30. /*cursor anonim*/
  31. BEGIN
  32.     FOR r IN (SELECT denumire_departament, SUM(salariul) suma FROM angajati a, departamente d
  33.     WHERE a.id_departament = d.id_departament GROUP BY denumire_departament) LOOP
  34.       /*EXIT WHEN c%rowcount>10;*/
  35.       DBMS_OUTPUT.PUT_LINE('Departamentul '||r.denumire_departament||' plateste salarii in valoare de ' || r.suma);
  36.     END LOOP;
  37. END;
  38. /
  39.  
  40.  
  41. /*cursor cu parametru*/
  42. DECLARE
  43.   CURSOR c(p_id angajati.id_departament%TYPE) IS SELECT nume FROM angajati WHERE id_departament = p_id;
  44.   r c%ROWTYPE;
  45. BEGIN
  46.   OPEN c(&id);
  47.     LOOP
  48.       FETCH c INTO r;
  49.        DBMS_OUTPUT.PUT_LINE('Angajatul ' || r.nume);
  50.       EXIT WHEN c%notfounD;
  51.     END LOOP;
  52.   CLOSE c;
  53. END;
  54. /
  55.  
  56.  
  57. /*cursori imbricati*/
  58. DECLARE
  59.   CURSOR c IS SELECT nr_comanda, data FROM comenzi;
  60.   CURSOR c1(p_nr NUMBER) IS SELECT denumire_produs, cantitate FROM produse p, rand_comenzi rc
  61.   WHERE p.id_produs = rc.id_produs AND rc.nr_comanda = p_nr;
  62.  
  63.   r c%ROWTYPE;
  64.   r1 c1%ROWTYPE;
  65. BEGIN
  66.   OPEN c;
  67.   LOOP
  68.   FETCH c INTO r;
  69.   EXIT WHEN c%notfound;
  70.   DBMS_OUTPUT.PUT_LINE('Comanda' || r.nr_comanda || ' incheiata la data '|| r.data || ' are urmatoarele produse ');
  71.     OPEN c1(r.nr_comanda);
  72.       LOOP
  73.         FETCH c1 INTO r1;
  74.       EXIT WHEN c1%notfound;
  75.         DBMS_OUTPUT.put_line('Produsul ' || r1.denumire_produs);
  76.       END LOOP;
  77.     CLOSE c1;
  78.       DBMS_OUTPUT.put_line('==============');
  79.   END LOOP;
  80.   CLOSE c;
  81. END;
  82. /
  83.  
  84. /*FOR UPDATE*/
  85. SELECT * FROM angajati;
  86.  
  87. DECLARE
  88.   CURSOR c IS SELECT * FROM angajati FOR UPDATE WAIT 20;
  89. BEGIN
  90.   FOR r IN c
  91.     LOOP
  92.       IF r.salariul < 5000 THEN
  93.         /*UPDATE angajati SET salariul = salariul+1 WHERE id_angajat = r.id_angajat;*/
  94.         UPDATE angajati SET salariul = salariul+1 WHERE CURRENT OF c;
  95.  
  96.       END IF;
  97.     END LOOP;
  98. END;
  99. /
  100. ROLLBACK;
  101.  
  102.  
  103. CREATE TABLE angajati_noi(id NUMBER(2), nume VARCHAR2(50));
  104. INSERT INTO angajati_noi VALUES(1, 'Popescu');
  105.  
  106.  
  107. SELECT * FROM angajati_noi;
  108.  
  109. DECLARE
  110.   CURSOR c IS SELECT * FROM angajati_noi ORDER BY id FOR UPDATE NOWAIT;
  111.   r c%ROWTYPE;
  112.   r_ant c%ROWTYPE;
  113. BEGIN
  114.   OPEN c;
  115.     FETCH c INTO r_ant;
  116.     LOOP
  117.       FETCH c INTO r;
  118.       EXIT WHEN c%NOTFOUND;
  119.       IF r_ant.id = r.id THEN DELETE FROM angajati_noi WHERE CURRENT OF c;
  120.       END IF;
  121.       r_ant:=r;
  122.     END LOOP;
  123.   CLOSE c;
  124. END;
  125. /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement