This shows you the differences between two versions of the page.
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> |