Differences

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

Link to this comparison view

bd2:laboratoare:03 [2020/10/17 21:55]
vlad_iulian.ilie [Excepții nedefinite]
bd2:laboratoare:03 [2020/10/22 13:21] (current)
ciprian.truica
Line 13: Line 13:
 Sunt trei tipuri de excepții: Sunt trei tipuri de excepții:
   * Predefinite = sunt excepții tratate automat de către sistemul de gestiune;   * Predefinite = sunt excepții tratate automat de către sistemul de gestiune;
-  * Nedefinite = sunt excepții ​netratate ​de către sistemul de gestiune, ​dar au coduri de eroare tip ORA-.... Aceste erori pot fi interceptate și tratate de programator;​+  * Nedefinite = sunt excepții ​tratate ​de către sistemul de gestiune, au coduri de eroare tip ORA-.... Aceste erori pot fi interceptate și tratate de programator ​daca li se atașează un nume;
   * Definite = sunt excepții definite și tratate de o secvență de program specificată de programator.   * Definite = sunt excepții definite și tratate de o secvență de program specificată de programator.
  
Line 58: Line 58:
 {{:​bd2:​laboratoare:​lab3_ex1_new_succes.png?​400|}} {{:​bd2:​laboratoare:​lab3_ex1_new_succes.png?​400|}}
  
-Pentru idDepartament = 1 se generează o eroare ORA-01403 deoarece în tabela ​dept nu există acest departament.+Pentru idDepartament = 1 se generează o eroare ORA-01403 deoarece în tabela ​departments ​nu există acest departament.
  
 {{:​bd2:​laboratoare:​lab3_ex1_new_fail.png?​600|}} {{:​bd2:​laboratoare:​lab3_ex1_new_fail.png?​600|}}
Line 113: Line 113:
 </​note>​ </​note>​
  
-<color red>Ex. 3</​color>​ În următorul exemple, se dorește să se facă o inserare în tabelul ​emp a unui nou angajat, dar fără să i se atribuie un empno, care este o coloană definită de tip not null.+<color red>Ex. 3</​color>​ În următorul exemple, se dorește să se facă o inserare în tabelul ​employees ​a unui nou angajat, dar fără să i se atribuie un employee_id, care este o coloană definită de tip not null.
  
 {{:​bd2:​laboratoare:​lab3_ex3_new.png?​600|}} {{:​bd2:​laboratoare:​lab3_ex3_new.png?​600|}}
Line 172: Line 172:
 <color red>Ex. 5</​color>​ Pentru angajații dintr-un departament,​ al cărui ID se introduce de la tastatură, care au comision null, să se genereze o excepție definită. <color red>Ex. 5</​color>​ Pentru angajații dintr-un departament,​ al cărui ID se introduce de la tastatură, care au comision null, să se genereze o excepție definită.
  
-{{:​bd2:​laboratoare:​l03ex05a.jpg?600|}}+{{:​bd2:​laboratoare:​lab3_ex5_new.png?600|}}
  
-Rezultatul execuției este:+Rezultatul execuției ​pentru idDepartament = 20 este:
  
-{{:​bd2:​laboratoare:​l03ex05b.png?600|}}+{{:​bd2:​laboratoare:​lab3_ex5_new_succes.png?400|}}
  
 Excepția definită se numește lipsaComision și se tratează prin afișarea mesajului ‘lipsa comision’. Se observă că excepția nu se declanșează pe o eroare ci se verifică în secvența IF dacă comisionul angajatului este null. Dacă o excepție este generată într-un bloc, iar acesta nu are secțiunea EXCEPTION, sau nu se dorește tratarea ei în blocul în care este generată, atunci excepția poate fi tratată în blocul superior sau în blocul apelant. Excepția definită se numește lipsaComision și se tratează prin afișarea mesajului ‘lipsa comision’. Se observă că excepția nu se declanșează pe o eroare ci se verifică în secvența IF dacă comisionul angajatului este null. Dacă o excepție este generată într-un bloc, iar acesta nu are secțiunea EXCEPTION, sau nu se dorește tratarea ei în blocul în care este generată, atunci excepția poate fi tratată în blocul superior sau în blocul apelant.
Line 186: Line 186:
 <color red>Ex. 6</​color>​ Să se trateze excepția lipsaComision din exercițiul 5 în blocul principal. <color red>Ex. 6</​color>​ Să se trateze excepția lipsaComision din exercițiul 5 în blocul principal.
  
-{{:​bd2:​laboratoare:​l03ex06a.jpg?600|}}+{{:​bd2:​laboratoare:​lab3_ex6_new.png?600|}}
  
-Rezultatul execuției este:+Rezultatul execuției ​pentru idDepartament = 20 este:
  
-{{:​bd2:​laboratoare:​l03ex06b.png?600|}}+{{:​bd2:​laboratoare:​lab3_ex6_new_succes.png?400|}}
  
 Se observă că execuția se oprește în momentul în care apare primul angajat fără comision. Această funcționalitate anormală apare din cauza faptului că excepția care apare în sub-bloc este tratată în blocul principal, astfel se face o ieșire forțată din buclă. Se observă că execuția se oprește în momentul în care apare primul angajat fără comision. Această funcționalitate anormală apare din cauza faptului că excepția care apare în sub-bloc este tratată în blocul principal, astfel se face o ieșire forțată din buclă.
Line 210: Line 210:
 <color red>Ex. 7</​color>​ Pentru un angajat care nu are comision să se definească o eroare care este tratată în momentul generării excepției și care are codul de eroare -20100. <color red>Ex. 7</​color>​ Pentru un angajat care nu are comision să se definească o eroare care este tratată în momentul generării excepției și care are codul de eroare -20100.
  
-{{:​bd2:​laboratoare:​l03ex07a.png?600|}}+{{:​bd2:​laboratoare:​lab3_ex7_new.png?600|}}
  
-Rezultatul execuției este:+Rezultatul execuției ​pentru ecuson = 100 este:
  
-{{:​bd2:​laboratoare:​l03ex07b.png?600|}}+{{:​bd2:​laboratoare:​lab3_ex7_new_succes.png?400|}}
  
 Sunt situații când un program PL/SQL poate avea o funcționalitate diferită, în privința excepțiilor,​ din cauza erorilor generate de catre sistemul de gestiune. Sunt situații când un program PL/SQL poate avea o funcționalitate diferită, în privința excepțiilor,​ din cauza erorilor generate de catre sistemul de gestiune.
Line 220: Line 220:
 <color red>Ex. 8</​color> ​ Să se calculeze suma veniturilor angajaților dintr-un departament care au o anumită funcție. <color red>Ex. 8</​color> ​ Să se calculeze suma veniturilor angajaților dintr-un departament care au o anumită funcție.
  
-{{:​bd2:​laboratoare:​l03ex08a.png?600|}}+{{:​bd2:​laboratoare:​lab3_ex8_new.png?600|}}
  
-Rezultatul execuției este:+Rezultatul execuției ​pentru idDepartament = 80 și functie = SA_REP ​este:
  
-{{:​bd2:​laboratoare:​l03ex08b.png?600|}}+{{:​bd2:​laboratoare:​lab3_ex8_new_succes.png?400|}} 
 + 
 +Rezultatul execuției pentru idDepartament = 10 și functie = SA_REP este: 
 + 
 +{{:​bd2:​laboratoare:​lab3_ex8_new_fail.png?​400|}} 
 + 
 +Rezultatul execuției pentru idDepartament = 1 și functie = SA_REP este: 
 + 
 +{{:​bd2:​laboratoare:​lab3_ex8_new_fail2.png?​400|}}
  
 Dacă din prima cerere SELECT se scoate clauza GROUP BY, adică: Dacă din prima cerere SELECT se scoate clauza GROUP BY, adică:
  
-{{:​bd2:​laboratoare:​l03ex08c.png?600|}}+{{:​bd2:​laboratoare:​lab3_ex8b_new.png?600|}} 
 + 
 +Rezultatul execuției blocului fără cererea group by pentru idDepartament = 80 și functie = SA_REP este: 
 + 
 +{{:​bd2:​laboratoare:​lab3_ex8b_new_succes.png?​400|}} 
 + 
 +Rezultatul execuției blocului fără cererea group by pentru idDepartament = 10 și functie = SA_REP este: 
 + 
 +{{:​bd2:​laboratoare:​lab3_ex8b_new_fail.png?​400|}}
  
-Rezultatul execuției blocului fără cererea group by este:+Rezultatul execuției blocului fără cererea group by pentru idDepartament = 1 și functie = SA_REP ​este:
  
-{{:​bd2:​laboratoare:​l03ex08d.png?600|}}+{{:​bd2:​laboratoare:​lab3_ex8b_new_fail2.png?400|}}
  
-Se observă că de data aceasta excepția s-a declanșat numai pentru departamentul ​50, cu toate că departamentul ​40 nu are niciun angajat. În mod normal, SELECT ar trebui să declanșeze o excepție, dar funcția SUM întoarce o valoare null, astfel încât nu se declanșează excepția predefinită no_data_found.+Se observă că de data aceasta excepția s-a declanșat numai pentru departamentul ​1, cu toate că departamentul ​10 nu are niciun angajat ​cu funcția SA_REP. În mod normal, SELECT ar trebui să declanșeze o excepție, dar funcția SUM întoarce o valoare null, astfel încât nu se declanșează excepția predefinită no_data_found.
  
 <​note>​ <​note>​
bd2/laboratoare/03.1602960924.txt.gz · Last modified: 2020/10/17 21:55 by vlad_iulian.ilie
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