12 decembrie 2011

Functii si pachete in PL/SQL

Acelasi tabel student {matricol, nume, grupa, medie, bursa} :

Functii
a) o functie nestocata care intoarce un mesaj: valideaza valoarea burselor primite de studenti dupa regulile:
1. studentii restantieri, cei cu media < 7 si cei cu media mai mica decat media grupei lor nu primesc burse
2. bursele nu pot depasi 1000 sau sa fie mai mici de 100
3. bursele nu pot fi > media*110
b) o functie stocata pe disc ce calculeaza bursa recomandata pt fiecare student, dupa regulile:
1. media peste 7 si media > media grupei
2. suma burselor studentilor din grupa sa nu depaseasca 2000
3. fiecare bursa sa fie cuprinsa intre 100 si 1000 si sa fie proportionala cu mediile din grupa (bursa=media*2000/suma_medii_grupa). De actualizat bursele cu aceste valori.
c) Pentru fiecare grupa calculat coeficientul grupei k = (nr_studenti cu media > media grupei)/nr total de studenti. Se vor da bonusuri studentilor proportional cu acest coeficient: bursa = bursa * (k+1). La coeficientul cel mai mic nu se da nimic, la coeficientul cel mai mare se da bonus inca o data valoarea bursei.
rezolvarile aici

Pachete
Au 2 parti: specificatia (un fel de interfata) si implementarea (functiilor, procedurilor).
In specificatie se pun variabilele globale, definitia tipurilor de date create, antetele functiilor si procedurilor, se denumesc exceptiile si se scriu cursoarele.
Obiectul creat se numeste facultate si are:
  • variabila globala nr_studenti
  • o functie: getter pentru nr_studenti
  • o procedura: setter pentru nr_studenti
  • definirea unui tip de date grupa cu campurile {nume, nr_studenti, medie}
  • o functie ce intoarce un obiect de tip grupa, cu parametru nr_matricol
  • o procedura care listeaza o grupa luata ca parametru, si afiseaza cele 3 campuri
  • un cursor care itereaza peste multimea de cei mai buni studenti pt fiecare grupa
  • o exceptie bursa_0
Se cere:
a) afisarea var globale nr_studenti
b) stergerea celui mai slab student din fiecare grupa, actualizarea var globale & reafisarea ei
c) folosind cursorul si functiile definite - listarea tuturor grupelor
d) folosind acelasi cursor, ridicarea exceptiei bursa_0 cand un student cu media cea mai mare din grupa are bursa 0; se trateaza cu actualizarea bursa=media*100.
rezolvarile aici

Niciun comentariu: