Differences

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

Link to this comparison view

bd2:laboratoare:05 [2019/10/27 21:55]
ciprian.truica [Considerente asupra procedurilor și funcțiilor]
bd2:laboratoare:05 [2020/11/05 13:27] (current)
ciprian.truica [Laboratorul 05 - PL/SQL Subprograme]
Line 1: Line 1:
 ===== Laboratorul 05 - PL/SQL Subprograme ===== ===== Laboratorul 05 - PL/SQL Subprograme =====
 +
  
 ===== Conținut ===== ===== Conținut =====
Line 6: Line 7:
   * Proceduri PL/SQL   * Proceduri PL/SQL
   * Funcții PL/SQL   * Funcții PL/SQL
 +  * Considerente asupra procedurilor și funcțiilor
 +  * Informații din dicționarul bazei de date
  
 ===== Subprograme ===== ===== Subprograme =====
Line 99: Line 102:
 <color red>Ex. 1.</​color>​ Exemplu de procedură declarată într-un bloc. <color red>Ex. 1.</​color>​ Exemplu de procedură declarată într-un bloc.
  
-{{:​bd2:​laboratoare:​l05ex01.png?​nolink&​600|}}+{{:​bd2:​laboratoare:​l05ex01.png?​nolink&​730|}}
  
-<color red>Ex. 2.</​color>​ Să se scrie o procedură declarată în cadrul unui bloc care întoarce salariu maxim pentru un ID de departament și o funcție introduse de la tastatură. Salariu maxim să fie returnat folosindu-se o variabilă scalară. Să se traducă joburile în limba română, în cadrul procedurii.+<color red>Ex. 2.</​color>​ Să se scrie o procedură declarată în cadrul unui bloc care întoarce salariu maxim pentru un ID de departament și o funcție introduse de la tastatură. Salariu maxim să fie returnat folosindu-se o variabilă scalară. Să se traducă joburile în limba română, în cadrul procedurii. Aveți grijă la cum sunt repartizate job-urile în departamente.
  
-{{:​bd2:​laboratoare:​l05ex02.png?​nolink&​600|}}+{{:​bd2:​laboratoare:​l05ex02.png?​nolink&​730|}}
  
 ==== Proceduri stocate ==== ==== Proceduri stocate ====
Line 134: Line 137:
   * **[PRAGMA AUTONOMOUS_TRANSACTION]** – specifică că execuția procedurii suspendă tranzacția curentă care se reia după terminarea execuției procedurii, adică într-o tranzacție imbricăm o altă tranzacție cu propriile sale comenzi TCL (COMMIT și ROLLBACK)   * **[PRAGMA AUTONOMOUS_TRANSACTION]** – specifică că execuția procedurii suspendă tranzacția curentă care se reia după terminarea execuției procedurii, adică într-o tranzacție imbricăm o altă tranzacție cu propriile sale comenzi TCL (COMMIT și ROLLBACK)
  
-<color red>Ex. 3.</​color>​ Să se creeze o procedură stocată care calculează veniturile angajaților cu o vechime de peste 20 de ani în firmă, dintr-un anumit departament. ​+<color red>Ex. 3.</​color>​ Să se creeze o procedură stocată care calculează veniturile angajaților cu o vechime de peste 10 de ani în firmă, dintr-un anumit departament. ​
  
-{{:​bd2:​laboratoare:​l05ex03.png?​nolink&​600|}}+{{:​bd2:​laboratoare:​l05ex03.png?​nolink&​730|}}
  
 <​note>​ <​note>​
Line 154: Line 157:
 <color red>Ex. 4.</​color>​ Să se scrie o procedură nestocată, care utilizează un cursor, ​ pentru calculul numărului de zile de concediu pentru toți angajații, după următorul algoritm: <color red>Ex. 4.</​color>​ Să se scrie o procedură nestocată, care utilizează un cursor, ​ pentru calculul numărului de zile de concediu pentru toți angajații, după următorul algoritm:
   - manageri de departament:​   - manageri de departament:​
-    * Vechimea < 32 de ani primesc 20 zile de concediu +    * Vechimea < 13 de ani primesc 20 zile de concediu 
-    * Vechimea >= 32 de ani primesc 22 zile de concediu+    * Vechimea >= 13 de ani primesc 22 zile de concediu
   - angajații care nu sunt șefi:   - angajații care nu sunt șefi:
-    * Vechimea < 32 de ani primesc 15 zile de concediu +    * Vechimea < 13 de ani primesc 15 zile de concediu 
-    * Vechimea >= 32 de ani primesc 22 zile de concediu+    * Vechimea >= 13 de ani primesc 22 zile de concediu
  
-{{:​bd2:​laboratoare:​l05ex04.png?​nolink&​600|}}+{{:​bd2:​laboratoare:​l05ex04.png?​nolink&​730|}}
  
 <color red>Ex. 5.</​color>​ Să se scrie un program PL/SQL cu o procedură care distribuie salariul șefului de departament la subalternii lui, în funcție de vechimea în companie, astfel: <color red>Ex. 5.</​color>​ Să se scrie un program PL/SQL cu o procedură care distribuie salariul șefului de departament la subalternii lui, în funcție de vechimea în companie, astfel:
Line 168: Line 171:
 Fondul de premiere se distribuie în mod egal la toți subalternii dintr-o grupă. Fondul de premiere se distribuie în mod egal la toți subalternii dintr-o grupă.
  
-{{:​bd2:​laboratoare:​l05ex05.png?​nolink&​600|}}+{{:​bd2:​laboratoare:​l05ex05.png?​nolink&​730|}}
  
 ==== Tipul Colecție ca parametri ==== ==== Tipul Colecție ca parametri ====
Line 178: Line 181:
 <color red>Ex. 6.</​color>​ Să se creeze un vector fie la nivelul dicționarului de date, fie local. ​ Într-un bloc, să se definească și inițializeze o variabilă de tipul nou creat și să se apeleze o procedură care afișează valorile elementelor. Să se șteargă tipul din dicționarul de date. <color red>Ex. 6.</​color>​ Să se creeze un vector fie la nivelul dicționarului de date, fie local. ​ Într-un bloc, să se definească și inițializeze o variabilă de tipul nou creat și să se apeleze o procedură care afișează valorile elementelor. Să se șteargă tipul din dicționarul de date.
  
-{{:​bd2:​laboratoare:​l05ex06a.png?​nolink&​600|}} {{:​bd2:​laboratoare:​l05ex06b.png?​nolink&​600|}} | +{{:​bd2:​laboratoare:​l05ex06a.png?​nolink&​730|}}  
-{{:​bd2:​laboratoare:​l05ex06c.png?​nolink&​600|}} {{:​bd2:​laboratoare:​l05ex06d.png?​nolink&​600|}} | + 
-{{:​bd2:​laboratoare:​l05ex06e.png?​nolink&​600|}} |+{{:​bd2:​laboratoare:​l05ex06b.png?​nolink&​730|}}  
 + 
 +{{:​bd2:​laboratoare:​l05ex06c.png?​nolink&​730|}} 
 + 
 +{{:​bd2:​laboratoare:​l05ex06d.png?​nolink&​730|}}  
 + 
 +{{:​bd2:​laboratoare:​l05ex06e.png?​nolink&​730|}} 
  
  
Line 186: Line 195:
  
 <color red> Ex. 7. </​color>​ Exemplu de cursor ca parametru. <color red> Ex. 7. </​color>​ Exemplu de cursor ca parametru.
-{{:​bd2:​laboratoare:​l05ex07a.png?​nolink&​600|}} {{:​bd2:​laboratoare:​l05ex07b.png?​nolink&​600|}} | + 
-{{:​bd2:​laboratoare:​l05ex07c.png?​nolink&​600|}} |+{{:​bd2:​laboratoare:​l05ex07a.png?​nolink&​730|}} 
 + 
 +{{:​bd2:​laboratoare:​l05ex07b.png?​nolink&​730|}} 
 + 
 +{{:​bd2:​laboratoare:​l05ex07c.png?​nolink&​730|}}
  
  
Line 241: Line 254:
 <color red>Ex. 8.</​color>​Să se scrie o funcție locală care primește ca parametru un identificator de departament și returnează numărul salariaților din departamentul respectiv. <color red>Ex. 8.</​color>​Să se scrie o funcție locală care primește ca parametru un identificator de departament și returnează numărul salariaților din departamentul respectiv.
  
-{{:​bd2:​laboratoare:​l05ex08.png?​nolink&​600|}}+{{:​bd2:​laboratoare:​l05ex08.png?​nolink&​730|}}
  
 ==== Funcții stocate ==== ==== Funcții stocate ====
Line 288: Line 301:
 Pentru stocarea punctelor acumulate de fiecare angajat, se va crea o tabelă temp_puncte care are următoarele coloane: idAng, nrPuncte, idDept. Pentru stocarea punctelor acumulate de fiecare angajat, se va crea o tabelă temp_puncte care are următoarele coloane: idAng, nrPuncte, idDept.
  
-{{:​bd2:​laboratoare:​l05ex09.png?​nolink&​600|}}+{{:​bd2:​laboratoare:​l05ex09.png?​nolink&​730|}}
  
 <​note>​ <​note>​
Line 369: Line 382:
 Codul sursă al procedurilor și funcțiilor stocate se găsește în dicționarul bazei de date, în view-ul USER_SOURCE,​ care are următoarea structură: Codul sursă al procedurilor și funcțiilor stocate se găsește în dicționarul bazei de date, în view-ul USER_SOURCE,​ care are următoarea structură:
  
-{{:​bd2:​laboratoare:​l05s1.png?​nolink&​600|}}+{{:​bd2:​laboratoare:​l05s1.png?​nolink&​730|}}
  
 Unde: Unde:
Line 383: Line 396:
 </​code>​ </​code>​
  
-{{:​bd2:​laboratoare:​l05s2.png?​nolink&​600|}}+{{:​bd2:​laboratoare:​l05s2.png?​nolink&​730|}}
  
 Pentru a vizualiza toate procedurile,​ funcțiile și tipurile de date create de utilizatorul curent, se poate folosi următoarea cerere SQL: Pentru a vizualiza toate procedurile,​ funcțiile și tipurile de date create de utilizatorul curent, se poate folosi următoarea cerere SQL:
Line 393: Line 406:
 </​code>​ </​code>​
  
-{{:​bd2:​laboratoare:​l05s3.png?​nolink&​600|}} +{{:​bd2:​laboratoare:​l05s3.png?​nolink&​730|}}
- +
-<color red>Ex. 10. </​color>​ Să se scrie o funcție vare calculează impozitul pe venit în funcție de gradul de salarizare (gradul se găsește în tabela SALGRADE), folosindu-se următorul algoritm: +
-  * Dacă grade = 1 atunci impozitul este 10% din venit +
-  * Dacă grade = 2 atunci impozitul este 15% din venit +
-  * Dacă grade = 3 atunci impozitul este 20% din venit +
-  * Dacă grade = 4 atunci impozitul este 25% din venit +
-  * Dacă grade = 5 atunci impozitul este 30% din venit +
-Să se afișeze numele angajatului,​ dacă este șef de departament sau nu, gradul de salarizare, procentul, venitul și impozitul. +
- +
-{{:​bd2:​laboratoare:​l05ex10.png?​nolink&​600|}}+
  
  
  
bd2/laboratoare/05.1572206136.txt.gz · Last modified: 2019/10/27 21:55 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