Differences

This shows you the differences between two versions of the page.

Link to this comparison view

bd2:laboratoare:04 [2019/10/23 08:52]
ciprian.truica [Eficiența cursoarelor]
bd2:laboratoare:04 [2020/10/22 18:12] (current)
vlad_iulian.ilie [Eficiența cursoarelor]
Line 1: Line 1:
 ====== Laboratorul 04 - PL/SQL Cursoare ====== ====== Laboratorul 04 - PL/SQL Cursoare ======
 +Exercitii date spre rezolvare: {{bd2:​laboratoare:​lab04_-_luni10-14.txt | Enunt/​Rezolvare pentru Luni EG305 10-14}}
  
 ===== Conținut ===== ===== Conținut =====
Line 26: Line 27:
 <color red>Ex. 1</​color>​ Exemplu greșit de folosire a unui cursor implicit (returnează mai mute valori care nu pot să fie inserate în variabila salariu): <color red>Ex. 1</​color>​ Exemplu greșit de folosire a unui cursor implicit (returnează mai mute valori care nu pot să fie inserate în variabila salariu):
  
-{{:​bd2:​laboratoare:​l04ex01.png?​nolink&​740|}}+{{:​bd2:​laboratoare:​lab4_ex1_new.png?​nolink&​350|}}
  
 <color red>Ex. 2</​color>​ Exemplu corect de folosire a unui cursor implicit (clauza where conține o condiție care garantează că se va întoarce o singură valoare): <color red>Ex. 2</​color>​ Exemplu corect de folosire a unui cursor implicit (clauza where conține o condiție care garantează că se va întoarce o singură valoare):
  
-{{:​bd2:​laboratoare:​l04ex02.png?​nolink&​740|}}+{{:​bd2:​laboratoare:​lab4_ex2_new.png?​nolink&​350|}}
  
-<color red>Ex. 3</​color>​ Exemplu corect de folosire a unui cursor implicit care returnează mai multe înregistrări (se folosește un nested table în care se inserează salariile angajaților din departamentul ​20):+<color red>Ex. 3</​color>​ Exemplu corect de folosire a unui cursor implicit care returnează mai multe înregistrări (se folosește un nested table în care se inserează salariile angajaților din departamentul ​80):
  
-{{:​bd2:​laboratoare:​l04ex03.png?​nolink&​740|}} +{{:​bd2:​laboratoare:​lab4_ex3_new.png?​nolink&​600|}} 
  
 ==== Cursoare Explicite ==== ==== Cursoare Explicite ====
Line 156: Line 157:
 </​note>​ </​note>​
  
-<color red>Ex. 4</​color>​ Să se declare un cursor care selectează denumirea departamentului,​ numele angajatului,​ salariul și data angajării pentru acei angajati care au venit în companie în 1981.+<color red>Ex. 4</​color>​ Să se declare un cursor care selectează denumirea departamentului,​ numele angajatului,​ salariul și data angajării pentru acei angajati care au venit în companie în 2003.
  
-{{:​bd2:​laboratoare:​l04ex04.png?​nolink&​740|}} ​+{{:​bd2:​laboratoare:​lab4_ex4_new.png?​nolink&​740|}} ​
  
 <color red>Ex. 5</​color>​ Să se folosească un cursor pentru a face o listă cu veniturile managerilor din companie. <color red>Ex. 5</​color>​ Să se folosească un cursor pentru a face o listă cu veniturile managerilor din companie.
  
-{{:​bd2:​laboratoare:​l04ex05.png?​nolink&​740|}} ​+{{:​bd2:​laboratoare:​lab4_ex5_new.png?​nolink&​740|}} ​
  
 Setul activ de date definite de cursorul c_angajati este procesat linie cu linie. Ciclul iterativ de citire și procesare a liniilor individuale continuă până la procesarea tuturor liniilor din setul activ. ​ Setul activ de date definite de cursorul c_angajati este procesat linie cu linie. Ciclul iterativ de citire și procesare a liniilor individuale continuă până la procesarea tuturor liniilor din setul activ. ​
Line 188: Line 189:
 <color red>Ex. 6</​color>​ Rescriere exemplu 5 folosind FOR. <color red>Ex. 6</​color>​ Rescriere exemplu 5 folosind FOR.
  
-{{:​bd2:​laboratoare:​l04ex06.png?​nolink&​740|}} ​+{{:​bd2:​laboratoare:​lab4_ex6_new.png?​nolink&​740|}} ​
  
 Într-un ciclu FOR se poate folosi un SELECT care este tot un cursor, dar care nu trebuie să mai fie declarat în secțiunea DECLARE. Sintaxa este: Într-un ciclu FOR se poate folosi un SELECT care este tot un cursor, dar care nu trebuie să mai fie declarat în secțiunea DECLARE. Sintaxa este:
Line 202: Line 203:
 <color red>Ex. 7</​color>​ Să se rescrie exercițiul 6 folosind un SELECT în ciclul FOR. <color red>Ex. 7</​color>​ Să se rescrie exercițiul 6 folosind un SELECT în ciclul FOR.
  
-{{:​bd2:​laboratoare:​l04ex07.png?​nolink&​740|}} ​+{{:​bd2:​laboratoare:​lab4_ex7_new.png?​nolink&​740|}} ​
  
 Când ne referim la rândul curent dintr-un cursor explicit comenzile SQL pot folosi clauza WHERE CURRENT OF cursor_name. Această clauză permite actualizarea sau ștergerea în punctul în care se află cursorul, fără a fi necesară folosirea condițiilor în clauza WHERE pentru identificarea unică a liniei. Trebuie să se folosească clauza FOR UPDATE în definirea cursorului pentru a se bloca rândurile la deschidere (se face un lock). Când ne referim la rândul curent dintr-un cursor explicit comenzile SQL pot folosi clauza WHERE CURRENT OF cursor_name. Această clauză permite actualizarea sau ștergerea în punctul în care se află cursorul, fără a fi necesară folosirea condițiilor în clauza WHERE pentru identificarea unică a liniei. Trebuie să se folosească clauza FOR UPDATE în definirea cursorului pentru a se bloca rândurile la deschidere (se face un lock).
Line 210: Line 211:
 </​note>​ </​note>​
  
-<color red>Ex. 8</​color>​ Să se modifice comisionul cu 10% din salariu pentru angajații care au peste 20 ani vechime în companie.+<color red>Ex. 8</​color>​ Să se modifice comisionul cu 10% din salariu pentru angajații care au peste 18 ani vechime în companie.
  
-{{:​bd2:​laboratoare:​l04ex08.png?​nolink&​740|}} ​+{{:​bd2:​laboratoare:​lab4_ex8_new.png?​nolink&​740|}} ​
  
-<color red>Ex. 9</​color>​ Să se șteargă din tabela ​EMP toți angajații care au comision. +<color red>Ex. 9</​color>​ Să se șteargă din tabela ​employees ​toți angajații care nu au comision. 
-<code sql> + 
-BEGIN  +{{:​bd2:​laboratoare:​lab4_ex9_new.png?​nolink&​740|}} ​
- FOR angajat IN (SELECT empno FROM emp WHERE comm IS NULL)  +
- LOOP  +
- DELETE FROM emp +
- WHERE empno = angajat.empno; +
- END LOOP;  +
-END; +
-</​code>​+
  
  
Line 230: Line 224:
 <color red>Ex. 10</​color>​ Să se facă o listă cu angajații care fac parte dintr-un departament specificat, au o anumită funcție și au venit în companie la o anumită dată specificată. Aceste condiții să fie transmise ca parametri unui cursor. <color red>Ex. 10</​color>​ Să se facă o listă cu angajații care fac parte dintr-un departament specificat, au o anumită funcție și au venit în companie la o anumită dată specificată. Aceste condiții să fie transmise ca parametri unui cursor.
  
-{{:​bd2:​laboratoare:​l04ex09.png?​nolink&​740|}} ​+{{:​bd2:​laboratoare:​lab4_ex10_new.png?​nolink&​740|}} ​
  
 ==== Tipuri de variabile REF CURSOR, SYS_REFCURSOR și RECORD ==== ==== Tipuri de variabile REF CURSOR, SYS_REFCURSOR și RECORD ====
Line 287: Line 281:
 <color red>Ex. 11</​color>​ Să se facă o listă cu toate departamentele. <color red>Ex. 11</​color>​ Să se facă o listă cu toate departamentele.
  
-{{:​bd2:​laboratoare:​l04ex12.png?​nolink&​740|}}+{{:​bd2:​laboratoare:​lab4_ex11_new.png?​nolink&​740|}}
  
-<color red>Ex. 12</​color>​ Să se listeze toți angajatii din tabela ​EMP.+<color red>Ex. 12</​color>​ Să se listeze toți angajatii din tabela ​employees.
  
-{{:​bd2:​laboratoare:​l04ex11.png?​nolink&​740|}}+{{:​bd2:​laboratoare:​lab4_ex12_new.png?​nolink&​600|}}
  
  
 <color red>Ex. 13</​color>​ Să se folosească un record pentru a păstra numele, funcția și salariul pentru toți angajații. <color red>Ex. 13</​color>​ Să se folosească un record pentru a păstra numele, funcția și salariul pentru toți angajații.
  
-{{:​bd2:​laboratoare:​l04ex13.png?​nolink&​740|}}+ 
 + 
 +{{:​bd2:​laboratoare:​lab4_ex13_new.png?​nolink&​740|}}
  
 ==== Eficiența cursoarelor ==== ==== Eficiența cursoarelor ====
Line 321: Line 317:
   * Dacă salariu_sef >= salariu_mediu_departament atunci comision_sef = 20% * salariu_mediu_departament   * Dacă salariu_sef >= salariu_mediu_departament atunci comision_sef = 20% * salariu_mediu_departament
  
-{{:​bd2:​laboratoare:​l04ex13.png?​nolink&​740|}}+{{:​bd2:​laboratoare:​lab4_ex14_new.png?​nolink&​740|}}
bd2/laboratoare/04.1571809954.txt.gz · Last modified: 2019/10/23 08:52 by ciprian.truica
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0