This shows you the differences between two versions of the page.
bdd:laboratoare:04 [2024/10/07 11:27] 127.0.0.1 external edit |
bdd:laboratoare:04 [2024/10/07 14:38] (current) ciprian.truica |
||
---|---|---|---|
Line 27: | 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): | ||
- | {{:bdd:laboratoare:lab4_ex1_new.png?nolink&350|}} | + | {{: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): | ||
- | {{:bdd:laboratoare:lab4_ex2_new.png?nolink&350|}} | + | {{: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 80): | <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): | ||
- | {{:bdd:laboratoare:lab4_ex3_new.png?nolink&600|}} | + | {{:bd2:laboratoare:lab4_ex3_new.png?nolink&600|}} |
==== Cursoare Explicite ==== | ==== Cursoare Explicite ==== | ||
Line 67: | Line 67: | ||
* for update – este opțiunea de blocare a liniilor (lock) selectate de cursor în baza de date | * for update – este opțiunea de blocare a liniilor (lock) selectate de cursor în baza de date | ||
- | Observatii: | + | Observații: |
* Interogarea SELECT poate să fie de oricetip, poate să conțină joinuri și poate să conțină subcereri | * Interogarea SELECT poate să fie de oricetip, poate să conțină joinuri și poate să conțină subcereri | ||
* Există o convenție în Oracle care recomandă ca numele cursoarelor să înceapă cu litera c; folosind un astfel de nume va fi clar că numele din secțiunea de declarare se referă la un cursor | * Există o convenție în Oracle care recomandă ca numele cursoarelor să înceapă cu litera c; folosind un astfel de nume va fi clar că numele din secțiunea de declarare se referă la un cursor | ||
Line 159: | Line 159: | ||
<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. | <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. | ||
- | {{:bdd:laboratoare:lab4_ex4_new.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. | ||
- | {{:bdd:laboratoare:lab4_ex5_new.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 189: | Line 189: | ||
<color red>Ex. 6</color> Rescriere exemplu 5 folosind FOR. | <color red>Ex. 6</color> Rescriere exemplu 5 folosind FOR. | ||
- | {{:bdd:laboratoare:lab4_ex6_new.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 203: | 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. | ||
- | {{:bdd:laboratoare:lab4_ex7_new.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 213: | Line 213: | ||
<color red>Ex. 8</color> Să se modifice comisionul cu 10% din salariu pentru angajații care au peste 18 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. | ||
- | {{:bdd:laboratoare:lab4_ex8_new.png?nolink&740|}} | + | {{:bd2:laboratoare:lab4_ex8_new.png?nolink&740|}} |
<color red>Ex. 9</color> Să se șteargă din tabela employees toți angajații care nu au comision. | <color red>Ex. 9</color> Să se șteargă din tabela employees toți angajații care nu au comision. | ||
- | {{:bdd:laboratoare:lab4_ex9_new.png?nolink&740|}} | + | {{:bd2:laboratoare:lab4_ex9_new.png?nolink&740|}} |
Line 224: | 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. | ||
- | {{:bdd:laboratoare:lab4_ex10_new.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 281: | 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. | ||
- | {{:bdd:laboratoare:lab4_ex11_new.png?nolink&740|}} | + | {{:bd2:laboratoare:lab4_ex11_new.png?nolink&740|}} |
<color red>Ex. 12</color> Să se listeze toți angajatii din tabela employees. | <color red>Ex. 12</color> Să se listeze toți angajatii din tabela employees. | ||
- | {{:bdd:laboratoare:lab4_ex12_new.png?nolink&600|}} | + | {{:bd2:laboratoare:lab4_ex12_new.png?nolink&600|}} |
Line 292: | Line 292: | ||
- | {{:bdd:laboratoare:lab4_ex13_new.png?nolink&740|}} | + | {{:bd2:laboratoare:lab4_ex13_new.png?nolink&740|}} |
==== Eficiența cursoarelor ==== | ==== Eficiența cursoarelor ==== | ||
Line 317: | 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 | ||
- | {{:bdd:laboratoare:lab4_ex14_new.png?nolink&740|}} | + | {{:bd2:laboratoare:lab4_ex14_new.png?nolink&740|}} |